hdu1002 高精度加法

此题的思路是模拟加法运算的过程,首先用s1,s2两个字符串数组接受两个大数。再将其转化为数字。s3数组保存加法之后的数字。注意输出时除去前导0 ,

代码如下:

#include<stdio.h>
#include<string.h>
int main()
{
    void zhuan(int ,int ,char s1[],char s2[],char s[]);
    char s1[1001],s2[1001],s[1001];
    int i,a,b,t,j;
    memset(s1,0,sizeof(s1));
    memset(s2,0,sizeof(s2));
    scanf("%d",&t);getchar();
    for(j=1;j<=t;j++)
    {    scanf("%s%s",s1,s2);
         printf("Case %d:\n",j);
         printf("%s + %s = ",s1,s2);
         a=strlen(s1);
         b=strlen(s2);
    for(i=0;i<a;i++)//将字符转化为数字
        s1[i]=s1[i]-'0';
    for(i=0;i<b;i++)
        s2[i]=s2[i]-'0';
    if(a>=b)
        zhuan(a,b,s1,s2,s);
    else zhuan(b,a,s2,s1,s);
    if(j!=t) printf("\n");
    }
    return 0;
}
void zhuan(int a,int b,char s1[],char s2[],char s[])//模拟加法过程
{
    int t=0,i,j;//t保存加法产生的进位
    for(i=a-1,j=b-1;j>=0;i--,j--)
        {
            s[i]=(s1[i]+s2[j]+t)%10;
            t=(s1[i]+s2[j]+t)/10;    
        }
    for(i=a-b-1;i>=0;i--)
    {
        s[i]=(s1[i]+t)%10;
        t=(s1[i]+t)/10;
    }
    if(t>0) printf("%d",t);
    for(i=0;i<a&&s[i]==0;i++);//输出时除去前导0 
    for(j=i;j<a;j++)
        printf("%d",s[j]);
    printf("\n"); 
}

 

posted @ 2013-12-12 23:29  段少  阅读(185)  评论(0编辑  收藏  举报