【发布时间】:2014-10-16 13:51:52
【问题描述】:
我正在尝试制作一个无穷大计算器(数字大于和小于 int 大小),只使用字符串。 我正在做加法,但是当我需要将十个字符报告给下一个字符时遇到问题:比如 9 + 7 = 16 我将在当前字符中放入 6,在结果字符串的下一个字符中放入 1。 这是我的代码:
char *add_inf(char *nb1, char *nb2, char *rslt)
{
if (*nb1 && *nb2)
{
*rslt = (*nb1 - '0' + *nb2 - '0' > 9 ? (*nb1 - '0' + *nb2 - '0') % 10 : *nb1 - '0' + *nb2 - '0') + *rslt - '0' + '0';
if (*nb1 - '0' + *nb2 - '0' > 9)
{
rslt++;
*rslt = '1'; //Here i put the next char to '1'
add_inf(nb1 + 1, nb2 + 1, rslt);
}
add_inf(nb1 + 1, nb2 + 1, rslt + 1);
}
return (rslt);
}
对不起 - '0' 和 + '0' 的混乱,我应该在计算之前创建一个子函数并添加它。 当输入为 nb1 = "11111111" 和 nb2 = "58856557" 时,输出是正确的:
69967668
但是当我输入 nb1 = "11111114" 和 nb2 = "588856557" 时,输出是:
699676611
代替将 1 添加到下一个字符并具有:
69967671
它只是将“1”字符添加到我的结果字符串中。 想法?
【问题讨论】:
-
一个问题:你如何让你的函数添加
4和99999(甚至99990)? -
我已将我的代码减少到最低限度以便于理解。如果这是您的问题,我正在管理添加两个不同长度的字符串
-
那么,只需在之前的字符串中添加一个虚拟的
0。因此,不是添加"4"和"99999",而是添加"04"和"099999"。这解决了额外的领先1的问题