在C中计算除999和1之外的任意两个数字的和

标签 c debugging

C 对我不友好。我正在编写一个程序来计算两个数字的总和。由于输入的数字非常大,所以我尝试使用 char 数组来计算。我想知道可能会出现什么问题,因为有时它有效,有时则不起作用。

我的代码是这样的:

if (len[0]>=len[1]){...}
else{
    for (int i=0 ;i<len[1];i++){
      if (i <=len[0]){
      temp[i] = (digits[0][i] + digits[1][i] + carry) % 10;
      carry = (digits[0][i] + digits[1][i] + carry) / 10;
    }else{
      temp[i] = (digits[1][i]  + carry) % 10;
      carry = (digits[1][i]  + carry) / 10;
    }}
    if (carry==1){
      temp[len[1]++]=1;

  }
  for (int i=0,j=len[1]-1; i <len[1];i++,j--){
      sum[j]=temp[i]+'0';

  }

它几乎适用于所有情况,直到我输入 1 和 999 它给出 220 而不是 1000。

我不确定为什么该程序仅在这种情况下不起作用。

最佳答案

  • 首先,您应该处理缩进和括号中的代码。 它可以帮助您和我们阅读您的代码。在提供的代码中,缩进不清晰也不正确,如果提供的代码是这个,则可能是第一个问题。

  • 使用defensive programming 。这里的“j”可能小于 0。

  • 在 for 循环中调用 printf("%d\n", sum[j]);

    for(int i=0,j=len[1]-1; i <len[1];i++,j--)
    {
        sum[j]=temp[i]+'0';
        printf("%d\n",sum[j]);
    }
  • 如果你想打印总和,你应该这样做
    for(int i=0,j=len[1]-1; i <len[1];i++,j--)
    {
        sum[j]=temp[i]+'0';
    }
    int mySum = 0;
    for(int index=0; index <sizeof(sum);index++)
    {
       mySum += sum[j];
    }
    printf("%d\n", mySum );
  • 如果您想要有效的代码,请重新编写所有代码
#include <stdio.h>
#include <math.h>

const char * number1_c = "1111";
const char * number2_c = "123";

int number1,number2;

int main()
{
   number1 = atoi(number1_c);
   printf("Sum of x = %d\n",  number1);
   number2 = atoi(number2_c);
   printf("Sum of y = %d\n",  number2);
   printf("Sum of x+y = %d\n",  number1+number2);
   return 0;
}

(如果您想了解如何将 char* 转换为 int,google it!)

关于在C中计算除999和1之外的任意两个数字的和,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55473479/

相关文章:

c - 返回包含数组的结构

javascript - javascript 函数返回的语法(空格)会影响结果吗?

javascript - 如何调试我的 JavaScript 代码?

C:将文件作为参数传递

c++ - 数组中的订单号

debugging - FlashDevelop 调试器问题

c - 缓冲区溢出向后流动?

xcode - 在监视全局变量的 XCode 上设置条件断点

c - 为什么可执行文件比与应用程序项目静态链接的库小?

c - 在 C 中的 if 语句后提示用户?