c - 乘以和增加战俘

标签 c for-loop pow multiplication

想法是这样的: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时对于两者an ,求和结果为 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/

相关文章:

java - 我可以使用从 Excel 行读取的不同变量集循环遍历我的程序吗?

c - 使用 C 将十六进制值存储到数组后打印

自定义 lwip microblaze echo 示例

python - 如何保持动态库嵌入C(.so文件)在不同Python版本之间的向后兼容性

variables - 用于函数重置的 clojure

Excel宏-for循环增量

c# - 从渐进成本算法中排除循环

c# - 是否有任何内置的 .NET 替代方案可以无错误地使用数字的幂 (Math.Pow)?

c++ - 需要一种更好的方法来编写幂函数

c - 如何读取 send(sock_fd, line, size, 0);?