2981:大整数加法
- 总时间限制:
- 1000ms
- 内存限制:
- 65536kB
- 描述
-
求两个不超过200位的非负整数的和。
- 输入
- 有两行,每行是一个不超过200位的非负整数,可能有多余的前导0。
- 输出
- 一行,即相加后的结果。结果里不能有多余的前导0,即如果结果是342,那么就不能输出为0342。
- 样例输入
-
22222222222222222222 33333333333333333333
- 样例输出
-
55555555555555555555
- 来源
- 程序设计实习2007
- 思路:数据用字符串输入,将字符串转换为整型,转换的时候逆序,以便于后面进位,求和,去0输出!注意考虑到0+0的情况!
- 代码:
#include<iostream> #include<stdio.h> #include<string.h> #include <stdlib.h> using namespace std; #define MAXLEN 2001 int a1[MAXLEN+10]; int a2[MAXLEN+10]; char str1[MAXLEN+10]; char str2[MAXLEN+10]; int main() { int i,j; memset(a1,0,sizeof(a1));//分配内存并初始化整型数组 memset(a2,0,sizeof(a2)); int Len1,Len2;//定义字符数组的长度 scanf("%s%s",&str1,&str2); Len1=strlen(str1); Len2=strlen(str2); j=0; for(i=Len1-1;i>=0;i--)//将字符串1转换为整型 { a1[j]=str1[i]-'0'; j++; } j=0; for(i=Len2-1;i>=0;i--)//将字符串2转换为整型 { a2[j]=str2[i]-'0'; j++; } if(Len1<Len2)//获取字符串最大长度 { i=Len1; Len1=Len2; Len2=i; } for(i=0;i<Len1;i++)//计算和的值 { a1[i]+=a2[i]; if(a1[i]>=10) { a1[i]=a1[i]-10; a1[i+1]=a1[i+1]+1; } } for(i=Len1;a1[i]==0&&i>=0;i--);//去掉多余的0,输出和 if(i>=0) { for(;i>=0;i--) printf("%d",a1[i]); } else printf("0");//0+0的情况 return 0; }