想法是这样的:http://prntscr.com/m0xopk ,它工作完美,除了 5,当我给 5 时,它计算错误。我不明白为什么?
int i,a,n;
int sum = 1;
scanf("%d",&a);
scanf("%d",&n);
for(i = 1;i <= n;i++){
sum *=pow(a,i);
}
printf("%d",sum);
最佳答案
It works perfectly except 5, when i give 5 it calculates wrong
不,它对于小于 5
的值非常有效。 。当您输入5
时对于两者a
和n
,求和结果为 30517578125
这对于 32
来说很大位int
输入要保存的变量。相反,您应该使用 uint64_t
类型变量。
此外,您不应该使用 pow()
整数类型的函数。检查this .
你可以这样做:
#include <stdio.h>
#include <inttypes.h>
int main()
{
int i, a, n;
uint64_t num = 1, result = 1;;
printf ("Enter a: \n");
scanf("%d",&a);
printf ("Enter n: \n");
scanf("%d",&n);
for(i = 0;i < n;i++){
num = num * a;
result = num * result;
}
printf("result: %"PRId64"\n", result);
return 0;
}
请注意这个 64
位解决方案也有限制,适用于输入 5
但可能不适用于比5
稍大的数字。如果你想要任意大的数字,请检查 this .
关于c - 乘以和增加战俘,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53968393/