大整数加法

来源:互联网 发布:java之父 求职 编辑:程序博客网 时间:2024/05/24 06:00

总时间限制: 
1000ms 
内存限制: 
65536kB
描述

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

输入
有两行,每行是一个不超过200位的非负整数,可能有多余的前导0。
输出
一行,即相加后的结果。结果里不能有多余的前导0,即如果结果是342,那么就不能输出为0342。
样例输入
2222222222222222222233333333333333333333
样例输出
55555555555555555555

#include <iostream>#include <string.h>#define LEN 200#define MAX(a, b)  (((a) > (b)) ? (a) : (b))#define MIN(a, b)  (((a) < (b)) ? (a) : (b))int main(int argc, char *argv[]){char num1[LEN];char num2[LEN];int i, j, k=0;int result[LEN+10];int len1, len2;int adjust=0;std::cin>>num1;std::cin>>num2;len1=strlen(num1);len2=strlen(num2);memset(result, 0, sizeof(int)*(LEN+10));if(len1>=len2){for(i=len1-1, j=len2-1; i>=0; i--){if(i>=(len1-len2)){result[k]+=(int)(num1[i]+num2[j]-'0'-'0');if(result[k]>=10){result[k]%=10;adjust=1;}elseadjust=0;j--;}else{result[k]+=(int)(num1[i]-'0');if(result[k]>=10){result[k]%=10;adjust=1;}elseadjust=0;}if(adjust)result[k+1]++;k++;}}else{for(i=len2-1, j=len1-1; i>=0; i--){if(i>=(len2-len1)){result[k]+=(int)(num1[j]+num2[i]-'0'-'0');if(result[k]>=10){result[k]%=10;adjust=1;}elseadjust=0;j--;}else{result[k]+=(int)(num2[i]-'0');if(result[k]>=10){result[k]%=10;adjust=1;}elseadjust=0;}if(adjust)result[k+1]++;k++;}}adjust=0;for(i=LEN+9; i>=0; i--){if(result[i]!=0)adjust++;if(adjust>0)std::cout<<result[i];}return 0;}


0 0
原创粉丝点击