高精度加法(自用)

今天开始尝试高精度加法

之前看过别人的思路于是决定自己写写,但总觉得写起来难受,于是把
思路转化成12122+6611→012122+006611

只是后面不知道咋交换s1,s2;所以只能勉强用if语句写了一大堆,所幸还是通过那题了

这里我们使用12122+6611或6611+12122作为案例

#include<stdio.h>
#include<string.h>
int inte(char c)
{
    if(c=='1')return 1;if(c=='2')return 2;if(c=='3')return 3;if(c=='4')return 4;if(c=='5')return 5;
    if(c=='6')return 6;if(c=='7')return 7;if(c=='8')return 8;if(c=='9')return 9;
    if(c=='0')return 0;    //差点忘了捏 
}
int main(void)
{
   char s1[505],s2[505];
   scanf("%s",s1);scanf("%s",s2);int i;
   int len1=strlen(s1);int len2=strlen(s2);
   int a[510]={0},b[510]={0},c[510]={0},d[505]={0};//初始为0,以便后边计算
   char s20[1000];//s2的补0的数组
   char s10[1000];//s1的补0的数组
   char o[600];o[0]='0';
   int count=0;
    if(len1>=len2){
      strcat(o,s1);//12122→012122
      for(i=0;i<=len1-len2;i++)
      {
          s20[i]='0'; 为s2=“6611“补0
      }
      strcat(s20,s2);6611→006611
      for(i=len1;i>=0;i--)//从数组最后往前加
      {
          a[i]=inte(o[i]);    //将012122各位字符转换成对应的数字
          b[i]=inte(s20[i]);
          if(a[i]+b[i]+c[i]>=10){ 
          c[i-1]=1;}       的本身的两个数字加上那个由后一位进的0或1大于零,则前一位要多加1
          d[i]=(a[i]+b[i]+c[i])%10;
      }
      if(d[0]==0)count=1;
      for(i=count;i<=len1;i++)
      {
      
         printf("%d",d[i]);
      }
  }
  if(len1<len2)//糟糕的if语句,重复上述步骤
  {
      strcat(o,s2);
      for(i=0;i<=len2-len1;i++)
      {
          s10[i]='0';
      }
      strcat(s10,s1);
   
      for(i=len2;i>=0;i--)
      {
          a[i]=inte(o[i]);
          b[i]=inte(s10[i]);
          if(a[i]+b[i]+c[i]>=10){
          c[i-1]=1;}
          d[i]=(a[i]+b[i]+c[i])%10;//差点忘了要加c[i]
      }
      if(d[0]==0)count=1;
      for(i=count;i<=len2;i++)
      {
         printf("%d",d[i]);
      }    
  }
   return 0; 
}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值