描述:
求两个不超过200位的非负整数的和。
输入:
有两行,每行是一个不超过200位的非负整数,可能有多余的前导0。
输出:
一行,即相加后的结果。结果里不能有多余的前导0,即如果结果是342,那么就不能输出为0342。
样例输入:
22222222222222222222
33333333333333333333样例输出:
55555555555555555555
核心思想:
将输入的每一位放到数组中,倒序后在按位相加,超出个位则进位;
算法:
#include<stdio.h> #include<stdlib.h> #include<string.h> #define max 202 //定义一个最大为数长度 int main() { int a[max],b[max],c[max]; int La,Lb,Lc=1,x=0; int i,j,k; char a1[max],b1[max]; gets(a1); gets(b1); La=strlen(a1); Lb=strlen(b1); for(i=0;i<=La-1;i++) //将a数组倒序排放 { a[La-i]=a1[i]-'0'; } for(j=0;j<=Lb-1;j++) { b[Lb-j]=b1[j]-'0'; } while(Lc<=La||Lc<=Lb) //如果Lc的长度小于La或Lb就退出循环 { c[Lc]=a[Lc]+b[Lc]+x; //按位相加 x=c[Lc]/10; //如果大于10则进位 c[Lc]%=10; //从c[lc]求余10得最低位 Lc++; } c[Lc]=x; while(c[Lc]==0) //去除前导 { Lc--; } for(k=Lc;k>=1;k--) //按序输出Lc数组 { printf("%d",c[k]); } return 0; }
谁对时间最吝啬,时间对谁越慷慨。要时间不辜负你,首先你要不辜负时间。放弃时间的人,时间也放弃他。把活着的每一天看作生命的最后一天。