作业比赛编号 : 100000593 - 《算法笔记》5.6小节——数学问题->大整数运算 问题 A: a+b
题目描述:
错误分析:起初一直报错,因为用的为int num[1000];题目中说a,b的位数不超过1000,但是它俩的和可能超过1000位!!!
代码
#include<cstdio>
#include<cstring>
typedef struct bign{
int num[1001];//起初一直报错,因为用的为int num[1000];
int len;
bign(){
memset(num,0,sizeof(num));
len=0;
}
}bign;
bign add(bign a,bign b)
{
bign c;
int carry=0;
for(int i=0;i<a.len||i<b.len;i++)
{
int temp=a.num[i]+b.num[i]+carry;
c.num[c.len++]=temp%10;
carry=temp/10;
}
if(carry!=0)
c.num[c.len++]=carry;
return c;
}
bign change(char s[])
{
bign c;
c.len=strlen(s);
for(int i=0;i<c.len;i++)
{
c.num[i]=s[c.len-1-i]-'0';
}
return c;
}
void print(bign c)
{
for(int i=c.len-1;i>=0;i--)
{
printf("%d",c.num[i]);
}
printf("\n");
}
int main()
{
char s1[1001],s2[1001];
while(scanf("%s%s",s1,s2)!=EOF){
bign a,b;
a=change(s1);
b=change(s2);
print(add(a,b));
}
return 0;
}
/**************************************************************
Problem: 1949
User: #######
Language: C++
Result: 正确
Time:4 ms
Memory:1192 kb
****************************************************************/