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 }