hdoj1002(A+B problem II 大数相加 c语言

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
char a[10000],b[10000],c[10000];
char a1[10000],b1[10000];
char temp[10000],temp1[1000];
#define max(a,b) a>b? a:b
#define min(a,b) a<b? a:b
void reverse(char a[])
{
    char d[10000];
    int len=strlen(a);
    int j=len-1;
    for(int i=0;i<len;i++)
    {
        d[j]=a[i];
        j--;
    }
    for(int i=0;i<len;i++)
    {
        a[i]=d[i];
    }

}
void add(char a[],char b[])
{
    reverse(a);
    reverse(b);

    int len1=strlen(a);
    int len2=strlen(b);
    for(int i=0;i<len1;i++)
        a1[i]=a[i];
    for(int i=0;i<len2;i++)
        b1[i]=b[i];
    if(len2>len1)//把数的位数用0填充至一样多
    {
        for(int i=len1;i<len2;i++)
        {
            a1[i]='0';
        }
    }
    if(len1>=len2)
    {
        for(int i=len2;i<len1;i++)
        {
            b1[i]='0';
        }
    }
    //printf("%s %s\n",a1,b1);
    int len=max(len1,len2);
    for(int i=0;i<len;i++)
    {
        if(i>0)
        {
        temp[i]=a1[i]-'0'+b1[i]-'0'+temp1[i-1];
        if(temp[i]>=10)
        {
        temp1[i]=temp[i]/10;//大于十就往前进
        temp[i]=(a1[i]-'0'+b1[i]-'0'+temp1[i-1]-10*temp1[i]);//剩下来的个位数
        }
        }
        if(i==0)
        {
        temp[i]=a1[i]-'0'+b1[i]-'0';
        if(temp[i]>=10)
        {
        temp1[i]=temp[i]/10;
        temp[i]=(a1[i]-'0'+b1[i]-'0'-10*temp1[i]);
        }
        }
        c[i]=temp[i]+'0';
        //printf("%d %d %c\n",temp[i],temp1[i],c[i]);
    }
    if(temp1[len-1]>0)
        c[len]=temp1[len-1]+'0';
    reverse(c);
}
int main()
{
    int n;
    while(scanf("%d",&n)!=EOF)
    {
            for(int i=1;i<=n;i++)
            {
              scanf("%s %s",&a,&b);
              memset(temp,0,sizeof(temp));
              memset(temp1,0,sizeof(temp1));
              add(a,b);
              reverse(a);
              reverse(b);
              printf("Case %d:\n%s + %s = %s",i,a,b,c);
              int len=strlen(c);
              for(int i=0;i<len;i++)
              {
                  c[i]='\0';
              }
              if(i!=n)
                printf("\n\n");
              if(i==n)
                printf("\n");
            }
            return 0;

    }
    return 0;
}

已AC

就是模拟一个竖式运算,思路很清晰,只是代码较长。。。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值