我被要求制作一个计算器,将输入作为一个字符串,这样我们就可以用长数来计算结果也应该是一个字符串。我尝试了添加部分,但它不适用于两个不同长度的数字。有人能告诉我我的代码出错的地方以及我如何解决它?还有一个关于如何使用这个原则划分的想法。
i = strlen(first);
j = strlen(second);
x = 0;
while(1)
{
z = (first[i-1] - 48) + (second[j-1] - 48) + carry;
carry = z/10;
result1[x] = z%10 + 48;
x++;
i--;
j--;
if(i==0 && j==0)
{ if(carry!=0)
result1[x] = carry + 48;
break;
}
}
i = strlen(result1);
for (i = 0, j = strlen(result1)-1; i < j; i++, j--)
{
c = result1[i];
result1[i] = result1[j];
result1[j] = c;
}
puts(result1);
答案 0 :(得分:2)
你必须用每个字符串中的最低有效数字开始求和;如果总和超过9,则将1转到下一个更有效的数字总和。就像你在纸上做的那样。这也意味着你必须组织一些东西,以便你知道每个字符串(数字)的长度,并在较短的数字前面处理“隐式零”。
答案 1 :(得分:0)
z = (first[i-1] - 48) + (second[j-1] - 48) + carry;
如果i或j中的一个为零或为负,则无效。如果你想继续循环直到两个字符串都被消耗掉,那么你可以使用?:来避免不安全地访问数组。您可能还会发现在循环开始时减少i和j更容易。
if(i==0 && j==0)
如果i!= j,这将无效。您需要找到一种更好的方法来终止循环。 (通过上面仔细的条件逻辑,你甚至可以继续循环,直到进位为零。)