自己写的一个高精度加法,网上有的都太高深,我本身是新手,写的大概新手比较好懂

#include<stdio.h>
#include<string.h>

int Min(int x,int y)
{
    if (x<y)
        return x;
    else
        return y;
}
    
int main()
{

    char a[1100],b[1100],c[1100]={0};//输入的a,b用二进制表示

    int answer[1000]={0};
    int temp=0,m,n,p,i,x,y,z;
    scanf("%s",a);
    scanf("%s",b);
    x=strlen(a);
    y=strlen(b);    
    //for(x=1000;a[x]!='\0';x--){}
    //for(y=1000;b[y]!='\0';y--){}
    x=x-1;
    y=y-1;
    z=Min(x,y);
    for(i=0;i<=z;i++)
    {
        
        if((a[x-i]==b[y-i])&&(a[x-i]=='1'))
        {
            //printf("ok");
            c[z-i]='1';
        }
        else
        {
            c[z-i]='0';
        }
    }

    //printf("%s\n",c);
    for(m=0,answer[999]=0;m<=strlen(c)-1;m++)//关键的一步,二进制转换十进制,十进制用数组储存
    {
        answer[999]=answer[999]*2+(c[m]-'0');
        for(n=998;n>=0;n--)
        {
            answer[n]=2*answer[n];
        }
        for(p=999;p>=1;p--)
        {
            answer[p-1]+=answer[p]/10;
            answer[p]=answer[p]%10;
        }
    }
    for(m=0;m<=999;m++)
        if(answer[m]!=0)
            break;
    while (m<=998)
    {printf("%d",answer[m++]);}
    printf("%d\n",answer[999]);
    //system("pause");
    return 0;
}



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值