poj 2062
题意是两个大数相加,第一行输入两个数的位且位数相等。然后每行输入两个数字分别是从两个大数最高位输起。
方法一:数组。注意数组输出速度慢易超时建议用putchar();本人亲测比printf();快1S左右。
#include<stdio.h>
#define M 1000005
int a[M],b[M],c[M];
int main()
{
int i;
int w;
int s=0;
scanf("%d",&w);
for( i=w-1; i>=0; i--)
scanf("%d%d",&a[i],&b[i]);
for(i=0; i<w; i++)
{
c[i]=(a[i]+b[i]+s)%10;
s=(a[i]+b[i]+s)/10;
}
i--;
if(s!=0)
{
c[i]=c[i]+1;
if(c[i]>=10)//注意这里此题bug是输入几位就输出几位没考虑进位
c[i]=19;
for(; i>=0; i--)
printf("%d",c[i]);
}
else
for(; i>=0; i--)
putchar(c[i]+48);
return 0;
}
方法二:字符串。对于字符串要注意的是getchar();的用法。在数组之中我并没考虑而字符串之中却不能省略。
#include<stdio.h>
#define M 1000005
char a[M],b[M],c[M];
int main()
{
int n,i;
scanf("%d",&n);
getchar();
for(i=0; i<n; i++)
{
a[i]=getchar();
getchar();
b[i]=getchar();
getchar();
}
int m=0;
int y=0;
for(i--; i>=0; i--)
{
m=a[i]+b[i]-48-48+y;
c[i]=m%10+48;
y=m/10;
}
for(i=0; i<n; i++)
putchar(c[i]);
return 0;
}