【发布时间】:2012-11-04 18:08:40
【问题描述】:
我有一个任务要求我首先设置整数数组来存储任意大的数字。通过使用 int 数组的每个元素,我可以为每个元素保留一个数字,因为 int 变量类型是 32 位,并且在失败之前最多只能达到大约 20 亿。我知道还有其他库使用 BigInt,但我想创建自己的数组。
我测试了我的代码,但它似乎不接受超过 9 位的值,直到它开始失败。
int * toArray(int, int);
int main()
{
int n, *res, counter, i;
printf("Input: ");
scanf("%d", &n);
while(n>0){
n/=10;
counter++;
}
res = toArray(n, counter);
for(i=1;i<=counter;i++){
printf("%d", *(res)+i);
}
printf("\n");
}
int * toArray(int n, int counter)
{
int i;
int *numberArray = malloc(sizeof(int) * counter);
for(i=0; i< counter; i++)
{
numberArray[i] = n % 10;
}
return numberArray;
}
我希望至少能够接受接近 20 位数字。我知道这可以用 int 数组来完成,尽管 char 数组(或字符串)也是可能的。但我想改用 int 数组。任何有助于理解为什么它在 9 位数左右失败以及过去的建议将不胜感激。谢谢。
【问题讨论】:
-
数组索引总是从 0 开始。为什么要使用
i=1, i<=counter打印? -
旁注:你永远不会释放在
toArray中创建的整数数组。你应该解决这个问题。 -
当你计算数字时,你做
n /= 10;,而n > 0,所以当你打电话给res = toArray(n, counter);时,你的号码n是0。如果你需要一个原始值的副本这样做。而在toArray中,你永远不会修改n,所以所有数字都会得到相同的值n % 10。