【发布时间】: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 数组。它看起来像复制粘贴,没有尝试理解。