【题目描述】
求两个不超过200位的非负整数的和。
【输入】
有两行,每行是一个不超过200位的非负整数,可能有多余的前导0。
【输出】
一行,即相加后的结果。结果里不能有多余的前导0,即如果结果是342,那么就不能输出为0342。
【输入样例】
【输出样例】
【来源】
No
【代码】
#include
#include
#include
using namespace std; int main () { int a[202],b[202],c[202],la,lb,lc,x=0; //数组a,b代表被加数 c代表和数 char a1[2000],b1[2000]; //方便输入以及进行倒序用 gets(a1); gets(b1); la=strlen(a1); lb=strlen(b1); for(int i=0;i<=la-1;i++) //进行倒序a { a[la-i]=a1[i]-'0'; } for (int j=0;j<=lb-1;j++) //进行倒序b { b[lb-j]=b1[j]-'0'; } lc=1; while(lc<=la||lc<=lb) //进行加法进位 { c[lc]=a[lc]+b[lc]+x; x=c[lc]/10; c[lc]%=10; lc++; } c[lc]=x; while(c[lc]==0) //注意最高位为0要舍弃 { lc--; } for(int k=lc;k>=1;k--) //注意存放在数组中的数是倒序的 { cout<
return
0; }
【解题思路】
难点:加法从右至左的运算顿、进位
for(int i=0;i<=la-1;i++) //进行倒序a { a[la-i]=a1[i]-'0'; }
3.进位的方法是设置一个变量进位的值初始x=0,然后每一个数组c等于数组a+数组然后加上进位数x,每一个x等于c除以10得到的,并且c的真实值是c取模10得到的值。
while(lc<=la||lc<=lb) //进行加法进位 { c[lc]=a[lc]+b[lc]+x; x=c[lc]/10; c[lc]%=10; lc++; }
发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/177976.html原文链接:https://javaforall.net
