【问题标题】:wrong result in adding huge numbers in c错误导致在 c 中添加大量数字
【发布时间】:2014-05-28 10:28:33
【问题描述】:

我想添加一些我将从键盘输入的巨大数字。但是我想将它们作为字符串输入。我用另一个答案中写的 ASCII 尝试了一种不同的方法,但它似乎不起作用。无论如何,这是我的代码:

#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
#include <string.h>

/* ADDING HUGE NUMBERS */
int addHugeNumbers(char *a1,char *a2,char *res){
    int i,q,e; // k is the add
    int k;
    k=0;
    i=0;
    q=0;
    e=strlen(a1);
    while (i<e-1) //CHECK IF THE FIRST ONE IS ONLY DIGITS
    {
        if (isdigit(a1[i])==0) return 0;
        else i++;
    }
    i=0;
    q=strlen(a2);
    while (i<q-1) //SAME CHECK FOR THE SECOND ONE
    {
        if (isdigit(a2[i])==0) return 0;
        else i++;
    }


    k=atoi(a1)+atoi(a2);
    sprintf(res,"%d",k);    
    puts(res); 
return 1;
}
int main(int argc, char *argv[]) {
    char a1[2000], a2[2000],res[2000];
    fgets(a1,2000,stdin);
    fgets(a2,2000,stdin);
    printf("%d",addHugeNumbers(a1,a2,res));
    return 0;

}

此代码适用于小数字(最多 5-6 位)。但是当涉及到更大的数字(15-16)时,它给了我错误的答案。 尝试添加 9999999999999999 + 9999999999999999

【问题讨论】:

  • C 没有对任意大数字的内置支持。您需要编写自己的处理方式或为此使用库。 GMP,也许?
  • 这种情况下应该使用可以做arbitrary precision arthematic的库,比如GMP
  • 只是带验证的a+b,没有“大数”的特殊处理。你甚至不改变你的 *res 数组。它看起来像复制粘贴,没有尝试理解。
  • 使用strtol() 可以更好地处理错误(atoi() 基本上没有错误处理)。

标签: c numbers add digits


【解决方案1】:

正确地说,C 没有对任意大数字的内置支持。

因此,如果确实需要将输入的大量数字作为字符串添加,那么请编写自己的函数,通过添加个位、十位、百位等来对它们求和,记住如果有进位的话。

【讨论】:

    猜你喜欢
    • 2021-12-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多