PO J2602 大数相加

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;
}   

你可能感兴趣的:(C语言,poj)