0

我被要求制作一个将输入作为字符串的计算器,这样我们就可以用长数字计算结果也应该是一个字符串。我尝试了加法部分,但它不适用于两个长度不同的数字。有人能告诉我我的代码哪里出错了,我该如何解决?还有一个想法,我将如何使用这个原则进行划分。

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);
4

2 回答 2

2

您必须从每个字符串中的最低有效数字开始求和;如果总和超过 9,则将 1 带到下一个更高的有效数字总和。就像你在纸上做的那样。这也意味着您必须组织事物以便知道每个字符串(数字)的长度,并处理较短数字前面的“隐式零”。

于 2011-12-09T23:48:28.083 回答
0
z = (first[i-1] - 48) + (second[j-1] - 48) + carry;

如果 i 或 j 之一为零或负数,这将不起作用。如果您想继续循环直到两个字符串都被消耗掉,那么您可以使用 ?: 来避免不安全地访问数组。您可能还会发现在循环开始时减少 i 和 j 更容易。

if(i==0 && j==0)

如果 i != j 这将不起作用。您需要找到一种更好的方法来终止循环。(通过上面仔细的条件逻辑,您甚至可以继续循环,直到进位也为零。)

于 2011-12-09T23:57:35.803 回答