zoukankan      html  css  js  c++  java
  • 大整数相加 a+b 的c语言实现

    终于来到我所期盼的高精度整数相加的题目了。这个题很经典,也算是一个很好的算法入门题吧。

    如果是java的话,系统类库已经内置了BigInteger类,直接调用就可以很轻易地解决了。但是学习c的编写也是非常有意义的。

    解题思路

    1、首先用两个数组s1,s2临时存放输入的数据

    2、输入以后将两个数组s1、s2以si[i]-'0'的方式把输入的字符串型数字转化为int型的数字。

          注意转换的过程中,要倒过来存,以便相加的时候低位的对齐,从低位开始相加。

    3、相加的过程:同位相加,相加的结果存放在num1[i]里。如果结果>10,num[i+1]要进位(+1),并且num1[i]存放结果-10(只存放个位)

    4、输出时:相加的过程中变量i一直向后移,到了最后会停在max(len(s1),len(s2))+1的位置。如果前面的加法恰好在最高位也进1,此时num1[i]就不为零。此时就要把这个多出来的高位也输出。反则不需要输出。

    其他详解看代码注释。

     1 #include<stdio.h>
     2 #include<string.h>
     3 int main()
     4 {
     5     char s1[1000],s2[1000];
     6     int num1[1000],num2[1000],len1,len2,i,j;
     7     memset(num1,0,sizeof(num1));
     8     memset(num2,0,sizeof(num2));
     9     while(scanf("%s%s",s1,s2)!=EOF)
    10     {
    11         len1=strlen(s1);
    12         len2=strlen(s2);
    13         for(i=len1-1,j=0; i>=0; --i) //从后往前处理大数字符串,把字符串变成数字组
    14         {
    15 
    16             num1[j]=s1[i]-'0';
    17             j++;
    18 
    19         }
    20         for(i=len2-1,j=0; i>=0; --i)
    21         {
    22             num2[j]=s2[i]-'0';
    23             j++;
    24 
    25         }
    26         //相加的处理,把num2的数加到i1中。进位加1,原超数-10
    27 
    28         for(i=0; i<(len2>len1?len2:len1); i++)
    29         {
    30             num1[i]+=num2[i];
    31             if(num1[i]>9)
    32             {
    33                 num1[i+1]+=1;
    34                 num1[i]-=10;
    35             }
    36         }
    37         if(num1[i])//如果最后一位不为0,把溢出来的那一位也输出。输出倒着输
    38             for(j=i; j>=0; j--)
    39                 printf("%d",num1[j]);
    40         else for(j=i-1; j>=0; j--)//如果最后一位为0,最高位不需要输出。
    41                 printf("%d",num1[j]);
    42         memset(num1,0,sizeof(num1));
    43         memset(num2,0,sizeof(num2));
    44         printf("
    ");
    45     }
    46     return 0;
    47 }
  • 相关阅读:
    排序算法——快速排序
    ArrayDeque源码解析
    PriorityQueue源码解析
    HashMap源码解析
    LinkedList源码解析
    ArrayList源码解析
    获取Spring容器管理的Bean工具类
    使用Google zxing生成二维码
    解决:SpringCloud中Feign支持GET请求POJO传参
    MySQL8.0 Unable to load authentication plugin 'caching_sha2_password'
  • 原文地址:https://www.cnblogs.com/AKsnoopy/p/8310426.html
Copyright © 2011-2022 走看看