大整数加法

大整数加法

求两个不超过 200200 位的非负整数的和。

输入格式

有两行,每行是一个不超过 200200 位的非负整数,可能有多余的前导 00。

输出格式

一行,即相加后的结果。结果里不能有多余的前导 00,即如果结果是 342342,那么就不能输出为 03420342。

输出时每行末尾的多余空格,不影响答案正确性

样例输入

22222222222222222222
33333333333333333333

样例输出

55555555555555555555

代码:

#include<iostream>
#include<string.h>
using namespace std;
int main(){ 

char a[203],b[203]; cin>>a>>b; //设置结果的最大位数 int lenmax; if(strlen(a)>strlen(b)){ lenmax = strlen(a)+2; }else { lenmax = strlen(b)+2; } char *c= new char[lenmax]; int i =strlen(a)-1; int j =strlen(b)-1; int k=0,up=0,x,y; while (i>=0||j>=0) { if (i<0) x = 0; else x = a[i]-'0'; if (j<0) y = 0; else y = b[j]-'0'; int z =x+y+up; if (z>9) { z= z%10; up=1; }else { up=0; } c[k++]=z+'0'; i--; j--; } k--; //加完之后发现还有进位 if (up>0) { c[++k]='1'; } //可能存在a 和 b 出现00011这种情况,故需要剃掉0开始的 for (i = k; i >=0; i--) { if(c[i]!='0'){ k=i; break; } } // 输出结果 for(int i=k;i>=0;i--){ cout<<c[i]; } cout<<endl; }

 


posted @ 2020-04-11 10:15  多发Paper哈  阅读(144)  评论(0编辑  收藏  举报
Live2D