C语言对字符串的数值运算

时间:2011-12-09 23:44:17

标签: c string addition

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

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

2 个答案:

答案 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,这将无效。您需要找到一种更好的方法来终止循环。 (通过上面仔细的条件逻辑,你甚至可以继续循环,直到进位为零。)