【发布时间】:2015-08-08 10:53:31
【问题描述】:
我正在尝试添加两个大整数。这是我制作的一个功能。 s1 是其中较大的字符串。在传递函数参数期间,我将考虑字符串长度。该代码适用于所有值,但具有 10^(n) 的值除外。因此,对于 100 + 2,它显示 o/p 为 2。对于 10 的其他幂情况也是如此。当我进行一些挖掘时,我注意到 for 循环在这些情况下只运行一次。因此s1.length() 报告长度为 1。我该如何解决?
void addBigInteger (string s1,string s2) {
string str3;
reverse(s1.begin(),s1.end());
reverse(s2.begin(),s2.end());
int temp = 0,carry=0,i;
for (i=0;i<s1.length();i++) {
if ((i+1) > s2.length())
s2[i] = '0';
temp = s1[i]-'0'+s2[i]-'0'+carry;
str3[i] = temp%10 + '0';
carry = temp/10;
}
while (carry!=0) {
str3[i++] = carry%10 + '0';
carry = carry/10;
}
for (i;i>=0;i--) {
cout << str3[i];
}
cout << endl;
}
【问题讨论】:
-
if ((i+1) > s2.length()) s2[i] = '0';显然写越界了。 -
所有对
str3的写入也是如此。 -
@timrau 这就是这里的想法。如果说 s2 的长度是 2,s1 的长度是 5,那么 s2 的所有其他数字都将被设为“0”以进行加法。但是,既然您已经说过了,我会看看我是否仍然可以在界限内添加。感谢您指出。编辑:简单地评论那部分是行不通的。猜猜我必须做一些边界检查
-
使用像 GMPlib 这样的 bignum 库。
-
@g33kyaditya 奇怪的是为什么你把一切都颠倒过来,最后却没有“反转”你的答案。
标签: c++ string-length