题目描述
求两个不超过200位的非负整数的和。
输入
有两行,每行是一个不超过200位的非负整数,没有多余的前导0。
输出
一行,即相加后的结果。结果里不能有多余的前导0,即如果结果是342,那么就不能输出为0342。
样例输入
88888888888888888888
33333333333333333333
样例输出
122222222222222222221
解题思路:1、将数据存入字符数组中;
2、 比较两组数组长度确定两数据之和的数组长度;
3、将字符数组转化为数字数组;
4、两数组对应元素相加并存入第三数组中;
5、高位保存;
6、判断第三数组各个元素,逢十进一;
7、输出第三数组;
#include <stdio.h>
#include <string.h>
int main()
{
char aa[202],bb[202];
int a[202],b[202],c[203];
int i,j,k,ki;
scanf("%s %s",aa,bb);
int m,n,len;
m=strlen(aa);
n=strlen(bb);
len = ( m > n)? m:n ;
for ( i=0; i<m; i++)
a[i]=aa[i]-'0'; //i=m;
for ( j=0; j<n; j++)
b[j]=bb[j]-'0'; //j=n;
for( i=m-1,j=n-1,k=len-1; i>=0 && j>=0; i--,j--,k--)
{
c[k] = a[i] + b[j];
}
for( ;i>=0; i--,k--)
c[k] = a[i];
for( ;j>=0; j--,k--)
c[k] = b[j]; //高位保存
//逢十进一
for( k=len-1; k>0; k--)
{
if( c[k] >9 )
{
c[k] = c[k]%10;
c[k-1] += 1;
}
}
for( k=0; k<len; k++)
printf("%d",c[k]);
return 0;
}