源稚空 发表于 2017-4-23 22:40:54

大数加法,然后解决int型a+b的范围问题

在一个普通的程序中
类似于:

int main()
{
         int a ,b ;
         scanf("%d%d",&a,&b);
         printf("%d",a+b);
         return 0 ;
}



会因为int型数据类型范围的约束,在值过大时会产生溢出


这个问题或许对于普通应用的程序没有多大影响,但是对于进行大规模计算,精度计算之类的程序(计算器也是...)有着非常大的意义


这里我会讲解如何解决这类问题(分别涉及大数的加减乘除)
这里有一个写好的程序,他可以计算10000位(电脑配置再高一点可以位数更大)



这里先对加法略作讲解


需要了解的几点知识 :
1 . 通过数组来对每一位进行处理
2 . 这个数组需要倒过来 ,从后向前处理
    例如   1234   +    3944
         那就是4321 + 4493   
            分解为 4+4 = 8
                     3+4 = 7
                     2+9 = 11
                     1+3 = 4
            然后再对大于10的位数做处理      分别是 此位减10 ,下一位加1
                                  2+9 =11       ------>    11-10 = 1
                                 1+3 = 4         ------>      4+ 1 = 5
            然后再判断最后一位是否大于10 ,如果是,长度加1
            然后再把数组倒过来输出就可以了
   关键是这里面每一步的实现 ,
   还有就是留下一个问题   如果是 1234+ 321   这种不同位数的相加 ,怎么在数组按为相加进位时保持同步?
   答案留在源代码里面了

**** Hidden Message *****




源稚空 发表于 2017-4-23 22:44:47

源稚空 发表于 2017-4-23 22:46:05

楼上是大数的效果图,至于普通版本的,大家可以自己去试试,有效位数只有8位
页: [1]
查看完整版本: 大数加法,然后解决int型a+b的范围问题