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
.