hdu 1002 A + B Problem II (大数相加)

来源:互联网 发布:最好的收音机软件 编辑:程序博客网 时间:2024/05/29 07:48

看题目请点这里

题意:

求两个数的和,可能是很大的数。

代码1:

#include<stdio.h>#include<string.h>int i,j,len,len1,len2;void ab(int *a,int *b)   //自定义求和函数{    int t;    for(t=i=0;i<=len;i++)    {        a[i]+=(b[i]+t);   //把数组b里的数字加到a数组里        t=a[i]/10;   //t为进位数        a[i]%=10;    }}int main(){    int t=0,n,a[1001],b[1001];    char c1[1001],c2[1001];    scanf("%d",&n);    while(n--)    {        memset(a,0,sizeof(a));   //全赋值为0        memset(b,0,sizeof(b));        scanf("%s %s",c1,c2);        printf(t++>0 ? "\nCase %d:\n%s + %s = " : "Case %d:\n%s + %s = ",t,c1,c2);        len1=strlen(c1);        for(i=0;i<len1;i++)        {            a[i]=c1[len1-1-i]-'0';   //字符转换成数字,倒序存放,方便求和        }        len2=strlen(c2);        for(i=0;i<len2;i++)        {            b[i]=c2[len2-1-i]-'0';        }        len=len1>len2?len1:len2;        ab(a,b);        if(a[len]==0)   //判断求和之后的长度的len还是len-1        {            len-=1;        }        for(i=len;i>=0;i--)        {            printf("%d",a[i]);        }        putchar('\n');    }    return 0;}


代码2:

#include<stdio.h>#include<ctype.h>#include<string.h>int main(){    int c=0,n,len,t,i;    char c1[1001],c2[1001];    scanf("%d",&n);    while(n--)    {        memset(c1,'\0',sizeof(c1));        memset(c2,'\0',sizeof(c2));        scanf("%s %s",c1,c2);        if(c++)        {            putchar('\n');        }        printf("Case %d:\n%s + %s = ",c,c1,c2);        len=(strlen(c1)>=strlen(c2)?strlen(c1):strlen(c2));        strrev(c1);   //将数倒过来        strrev(c2);            t=0;        for(i=0;i<len;i++)        {            if(!isdigit(c1[i]))            {                c1[i]='0';            }            if(!isdigit(c2[i]))            {                c2[i]='0';            }            if((c1[i]-'0'+c2[i]-'0'+t)>9)    //逐个相加,并用t保存进位情况            {                c1[i]=(c1[i]-'0'+c2[i]-'0'+t-10+'0');                t=1;            }            else            {                c1[i]+=(c2[i]-'0'+t);                t=0;            }        }        if(t==1)        {            putchar('1');        }        c1[len]='\0';        strrev(c1);        puts(c1);    }    return 0;}



原创粉丝点击