鱼C论坛

 找回密码
 立即注册
查看: 1903|回复: 2

[技术交流] 大数加法,然后解决int型a+b的范围问题

[复制链接]
发表于 2017-4-23 22:40:54 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

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

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   这种不同位数的相加 ,怎么在数组按为相加进位时保持同步?
     答案留在源代码里面了

游客,如果您要查看本帖隐藏内容请回复





想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2017-4-23 22:44:47 | 显示全部楼层
QQ截图20170423222034.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-4-23 22:46:05 | 显示全部楼层
楼上是大数的效果图,至于普通版本的,大家可以自己去试试,有效位数只有8位
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-4-20 01:46

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表