刚入门编程语言的同学可能对大整数加法合乘法有点小头疼。在这里就给大家分享下。希望对大家有所帮助。下面进入正题
Description
求两个不超过200位的非负整数的和。
Input
有两行,每行是一个不超过200位的非负整数,没有多余的前导0。
Output
一行,即相加后的结果。结果里不能有多余的前导0,即如果结果是342,那么就不能输出为0342。
Sample Input
22222222222222222222
33333333333333333333
Sample Output
55555555555555555555
代码:
#include <stdio.h>
#include<string.h>
int main(int argc, char *argv[])
{
int a[200]={0},b[200]={0},i,j,m,l,k,t,h;
char aa[200],bb[200];
scanf("%s%s",&aa,&bb);
l=strlen(aa); // 计算aa长度
t=strlen(bb); // 计算bb长度
for(m=0,j=l-1;j>=0;j--,m++)
a[m]=aa[j]-'0'; //要把字符转化成数字
for(m=0,j=t-1;j>=0;j--,m++)
b[m]=bb[j]-'0'; //要把字符转化成数字
h=l>t?l:t;
for(i=0;i<h ; i ++)
a[i]+=b[i]; //将相对应的数字相加
//下面这一步是将超过10的位数进位
for(i=0;i<h;i++)
if(a[i]>=10)
{
a[i+1]=a[i+1]+a[i]/10;
a[i]%=10;
}
//这里要倒着输出哦!!!
for(i=h;i>=0;i--)
if(a[i]==0)continue;
else{ k=i;break; }
for(i=k;i>=0;i--)
printf("%d",a[i]);
printf("\n");
return 0;
}