POJ 1503 Integer Inquiry

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

高精度加法运算

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

高精度加法

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

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

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

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

 1 #include <iostream>
 2 #include <cstdio>
 3 #include <cstring>
 4 using namespace std;
 5 #define N 105
 6 
 7 char in[N];//s放大数,in为每次输入时的临时数组
 8 char s[N][N];
 9 
10 int main()
11 {
12     int i,j,line,jin,he;//line为大数的行数,jin为进位,he为和
13 
14     for (i=0;;i++)
15     {
16         scanf("%[^\n]",in);
17         getchar();
18 
19         if (in[0]=='0'&&in[1]==0)
20         {
21             break;
22         }
23 
24         s[i][0]=strlen(in);//0号元素记录长度
25 
26         for (j=1;j<=s[i][0];j++)//逆序放大整数
27         {
28             s[i][j]=in[s[i][0]-j]-'0';
29         }
30     }
31 
32     line=i;//记录数据行数
33 
34     for (i=1;i<line;i++)
35     {
36         jin=0;//进位标记归0
37 
38         for (j=1;j<N;j++)//进行加法运算
39         {
40             he=s[0][j]+s[i][j]+jin;
41             jin=he/10;//进位
42             s[0][j]=he%10;
43         }
44     }
45 
46     for (i=N-1;s[0][i]==0;i--);//从后往前找第一个不为0的数
47 
48     for (;i>=1;i--)//输出和
49     {
50         printf("%d",s[0][i]);//要用%d输出
51     }
52     printf("\n");
53 
54     return 0;
55 }

猜你喜欢

转载自www.cnblogs.com/hemeiwolong/p/9084429.html