算法提高 大数加法
时间限制: 1 Sec 内存限制: 256 MB题目描述
输入两个正整数a,b,输出a+b的值。
输入
两行,第一行a,第二行b。a和b的长度均小于1000位。
输出
一行,a+b的值。
样例输入
42
样例输出
6
第一种解法:
#include<stdio.h>
#include<string.h>
int main()
{
int i,t,x;
char a[1010],b[1010];
int c[1010],d[1010],e[1010];
int p,q,m,n;
memset(e,0,sizeof(e));
memset(c,0,sizeof(c));
memset(d,0,sizeof(d));
scanf("%s %s",a,b);
m=strlen(a);
n=strlen(b);
p=0;
q=0;
for(i=m-1; i>=0; i--)
{
c[p]=a[i]-'0';
p++;
}
for(i=n-1; i>=0; i--)
{
d[q]=b[i]-'0';
q++;
}
if(m<n)
{
t=m;
m=n;
n=t;
}
for(i=0; i<m; i++)
{
e[i]=e[i]+c[i]+d[i];
if(e[i]>=10)
{
e[i]=e[i]%10;
e[i+1]=1;
}
}
for(i=m; i>=0; i--)
if(e[i]!=0)
{
x=i;
break;
}
for(i=x; i>=0; i--)
printf("%d",e[i]);
printf("\n");
return 0;
}
第二种解法:
#include<stdio.h>
#include<string.h>
int main()
{
int i,t,x;
char a[1010],b[1010];
int c[1010],d[1010],e[1010];
int p,q,m,n;
memset(e,0,sizeof(e));
memset(c,0,sizeof(c));
memset(d,0,sizeof(d));
scanf("%s %s",a,b);
m=strlen(a);
n=strlen(b);
p=0;
q=0;
for(i=m-1; i>=0; i--)
{
c[p]=a[i]-'0';
p++;
}
for(i=n-1; i>=0; i--)
{
d[q]=b[i]-'0';
q++;
}
if(m<n)
{
t=m;
m=n;
n=t;
}
for(i=0; i<m; i++)
{
e[i]=e[i]+c[i]+d[i];
if(e[i]>=10)
{
e[i]=e[i]%10;
e[i+1]=1;
}
}
for(i=m; i>=0; i--)
if(e[i]!=0)
{
x=i;
break;
}
for(i=x; i>=0; i--)
printf("%d",e[i]);
printf("\n");
return 0;
}
#include<iostream>
#include<string.h>
#include<stdio.h>
using namespace std;
int main()
{
char a[1005],b[1005];
int v1[1005],v2[1005],v3[1005];
int i,j,len1,len2;
cin>>a>>b;
memset(v1,0,sizeof(v1));
memset(v2,0,sizeof(v2));
memset(v3,0,sizeof(v3));
len1=strlen(a);
len2=strlen(b);
for(i=0;i<len1;i++)
v1[i]=a[len1-1-i]-'0';
for(i=0;i<len2;i++)
v2[i]=b[len2-1-i]-'0';
//cout<<v1<<" "<<v2;
if(len1<len2)
len1=len2;
for(i=0;i<len1;i++)
{
v3[i]=v3[i]+v1[i]+v2[i];
if(v3[i]>=10)
{
v3[i]=v3[i]%10;
v3[i+1]=1;
}
}
if(v3[len1]!=0)
cout<<v3[len1];
for(i=len1-1;i>=0;i--)
cout<<v3[i];
cout<<endl;
return 0;
}
#include<iostream>
#include<string.h>
#include<stdio.h>
using namespace std;
int main()
{
char a[1005],b[1005];
int v1[1005],v2[1005],v3[1005];
int i,j,len1,len2;
cin>>a>>b;
memset(v1,0,sizeof(v1));
memset(v2,0,sizeof(v2));
memset(v3,0,sizeof(v3));
len1=strlen(a);
len2=strlen(b);
for(i=0;i<len1;i++)
v1[i]=a[len1-1-i]-'0';
for(i=0;i<len2;i++)
v2[i]=b[len2-1-i]-'0';
//cout<<v1<<" "<<v2;
if(len1<len2)
len1=len2;
for(i=0;i<len1;i++)
{
v3[i]=v3[i]+v1[i]+v2[i];
if(v3[i]>=10)
{
v3[i]=v3[i]%10;
v3[i+1]=1;
}
}
if(v3[len1]!=0)
cout<<v3[len1];
for(i=len1-1;i>=0;i--)
cout<<v3[i];
cout<<endl;
return 0;
}