Cha*_*ana 13 c types long-integer
int power(int first,int second) {
int counter1 = 0;
long ret = 1;
while (counter1 != second){
ret *= first;
counter1 += 1;
}
return ret;
}
int main(int argc,char **argv) {
long one = atol(argv[1]);
long two = atol(argv[2]);
char word[30];
long finally;
printf("What is the operation? 'power','factorial' or 'recfactorial'\n");
scanf("%20s",word);
if (strcmp("power",word) == 0){
finally = power(one,two);
printf("%ld\n",finally);
return 0;
}
}
Run Code Online (Sandbox Code Playgroud)
这个函数用于执行像计算器一样的"power of power"操作,所以如果我写:./a.out 5 3它将给我5的3的幂并打印出125
问题是,如果数字如下:./a.out 20 10,20到10的幂,我希望看到结果:1.024 x 10^13,但它反而输出797966336.
我得到的当前输出的原因是什么?
注意:我认为这atol()与long数据类型有关.这些不足以存储信息吗?如果没有,任何想法如何让它运行更大的数字?
Lig*_*ica 23
当然,你的输入是long,但你的power功能需要并返回int!显然,这是你系统上的32位...所以,在你的系统上,1.024×10 13是int可以处理的.
确保选择一个足够大的数据类型,并始终如一地使用它.甚至long可能还不够 - 检查你的系统!
首先,您需要更改的返回类型和输入参数类型power(),从int到long.否则,在一个系统上long,并int都具有不同的尺寸,
int在您传递时,输入参数可能会被截断long.
返回值将返回int之前返回值,这可能会截断实际值.
之后,1.024×10 13(10240000000000)不能被int或long(如果是32位)保持.您需要使用具有更多宽度的数据类型,例如long long.