最新消息:点击查看大S的省钱秘笈

POJ 1503 Integer Inquiry C语言版

POJ题解 Slyar 123浏览 0评论

文章作者:姜南(Slyar) 文章来源:Slyar Home (www.slyar.com) 转载请注明,谢谢合作。

高精度加法

Description

One of the first users of BIT's new supercomputer was Chip Diller. He extended his exploration of powers of 3 to go from 0 to 333 and he explored taking various sums of those numbers.
This supercomputer is great,'' remarked Chip. I only wish Timothy were here to see these results.'' (Chip moved to a new apartment, once one became available on the third floor of the Lemon Sky apartments on Third Street.)

Input

The input will consist of at most 100 lines of text, each of which contains a single VeryLongInteger. Each VeryLongInteger will be 100 or fewer characters in length, and will only contain digits (no VeryLongInteger will be negative).

The final input line will contain a single zero on a line by itself.

Output

Your program should output the sum of the VeryLongIntegers given in the input.

Sample Input

123456789012345678901234567890
123456789012345678901234567890
123456789012345678901234567890
0

Sample Output

370370367037037036703703703670

Slyar:说下题意。给你至多100行超大整数,以0结束输入,要求你求出这些超大整数的和。

高精度加法运算,试了几种思路,感觉下面这种看起来最舒服...

例如19999 + 999 + 9,看图更清晰

高精度加法

1、以字符串格式读入超大整数,然后将每一位转换成整型并逆序存放在数组中。

2、把每次读入字符串的长度存放在0号元素中(sum[i][0])。

3、将所有大整数的和存放在0号字符串中(sum[0])。

4、从0号字符串最大处向前寻找第一个不为0的元素,然后逆序输出和。

转载请注明:Slyar Home » POJ 1503 Integer Inquiry C语言版

发表我的评论
取消评论

表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

网友最新评论 (6)

  1. if (str[0] == '0' && str[1] == 0) break; 这一句中,str[1] == 0是干什么用的?
    shilong5年前 (2011-08-23)回复
  2. 对位就是使被加数和加数有相同的位数;补零,由于两个正数相加可能有进位,对位后再在它们前面各补一个0以确定和的最大位数。@Cnfn
    匿名6年前 (2011-01-02)回复
  3. 请问你使用的是哪个代码插件? 感觉你使用的这个插件显示效果比较好,期待回复!
    Cnfn6年前 (2010-12-29)回复
  4. @匿名 对位补0?什么意思?
    Cnfn6年前 (2010-12-29)回复
  5. 高精度加法基本方法:清除前导0,对位补0,相加,再清除前导0,就很简单。
    匿名6年前 (2010-10-26)回复
  6. 前辈你好,看过你的这篇文章,写的很通俗明了。 我的代码一直交不上,想请你帮忙看一下,找一下错误,谢谢,请发到我邮箱wenan2007@126.com 以下是我的程序代码: #include #include void main() { char str[3]="0",str1[150],str2[100];int m,n,i,max,sum1,sum2; gets(str1); if(strcmp(str,str1)) {gets(str2); while(strcmp(str,str2)) { m=strlen(str1);n=strlen(str2);max=m; if(m>n) { for(i=1;i=0;i--)str2[i]='0'; } if(m<n) { max=n; for(i=1;i=0;i--)str1[i]='0'; }//以上两个if使得字符串长度短的在字符串前补0使得字符串长度相同 sum1=str1[max-1]+str2[max-1]-'0'-'0'; str1[max-1]='0'+sum1%10; for(i=max-2;i>=0;i--) { sum2=str1[i]+str2[i]-'0'-'0'+sum1/10; str1[i]='0'+sum2%10; sum1=sum2; }//算出各个位数的数字,并将结果保存在字符串str1中 if(sum1>9) { for(i=max;i>0;i--) str1[i]=str1[i-1]; str1[0]='0'+sum1/10;max++; }//若最高位上和为两位数,则将str1的各个字符向后移动,然后对最高位赋值,由于是两个数字相加,最多使得位数加1 str1[max]=''; gets(str2); }} for(i=0;str1[i]=='0';i++);//找出字符串中首非0字符的下标 puts(&str1[i]); }
    匿名7年前 (2010-06-22)回复