作者wayne4125 (疤痂灸)
看板C_and_CPP
标题[问题] 基本大数加法
时间Mon Aug 21 20:20:45 2017
开发平台(Platform): (Ex: Win10, Linux, ...)
win7
编译器(Ex: GCC, clang, VC++...)+目标环境(跟开发平台不同的话需列出)
dev c++
额外使用到的函数库(Library Used): (Ex: OpenGL, ...)
问题(Question):
小弟初学C语言,实作基本的大数加法,得出错误後想了很久还是没有头绪哪里错
rev函数将字串反转
minus 和 add 将字串里的资料减或加 '0' 再运算
还请大神们指点迷津
喂入的资料(Input):
两正整数
预期的正确结果(Expected Output):
相加的数字
错误结果(Wrong Output):
有时是乱码,大部分数字错误
程式码(Code):(请善用置底文网页, 记得排版)
http://codepad.org/GDrFZFxD
补充说明(Supplement):
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 61.223.187.165
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/C_and_CPP/M.1503318048.A.D52.html
1F:→ jerryh001: 假设你做12345+67 找你这样写会变12345+???67 ?表示一 08/21 20:40
2F:→ jerryh001: 个不知道的垃圾值 08/21 20:40
3F:→ jerryh001: *照你这样写 08/21 20:40
4F:→ stucode: 变数没有初始化 初值不会是0更不会是'0' 08/21 20:43
5F:→ stucode: 另外进位似乎多加一次 08/21 20:44
6F:→ wayne4125: 那要怎麽初始化呢 有点爬不到答案 08/21 20:45
7F:→ wayne4125: s大 c[i+1] +=1 想帮最高位+1 其他状况应该不会多加 08/21 20:47
8F:→ wayne4125: char c[100]={'0'} 也不会对 QQ 08/21 20:48
9F:→ stucode: 可用回圈或memset 初始化语法好像只能手动填'0' 08/21 20:51
10F:→ wayne4125: 真的!! 谢谢s大 :) 08/21 20:53
11F:→ wayne4125: 但是输入2999 1 会甚麽都没有出现欸 QAQ 08/21 20:55
12F:→ stucode: 仔细看这个做法还蛮有问题的 c中的0同时代表数字0及'\0' 08/21 21:00
13F:→ stucode: 所以rev等函数的运作会出问题 08/21 21:00
14F:→ wayne4125: 无法正确读取数字长度 所以会乱掉 08/21 21:02
15F:→ wayne4125: 大概知道问题点了 再改善程式看看 谢谢:D 08/21 21:02
16F:推 alan23273850: 路过回个,顺便提醒一下虽然初学的时候大数加法习惯 08/22 02:03
17F:→ alan23273850: 上会以digit为单位,但是这样每次只会处理到一位数 08/22 02:03
18F:→ alan23273850: ,在效率上不够优,熟悉之後建议可以int为单位,也 08/22 02:04
19F:→ alan23273850: 就是一次以差不多10^10为单位,运算上会快很多 08/22 02:04
20F:→ alan23273850: 然後也可以避免掉字串处理常出现的bug,只能说字元 08/22 02:05
21F:→ alan23273850: 单位或int单位都各自有其优缺,可斟酌选择 08/22 02:06
22F:→ wayne4125: 是的! 多谢指教^^ 08/22 14:13
24F:→ ddchris: 网站写得蛮详细的喔 08/28 23:56