如何用while循环计算1+2²+3³+…+N^N的和(不使用pow()函数)
解决1+2²+3³+…+N^N的精确求和问题
首先修正你提供的基础代码中的语法错误:
- 读取输入应使用
scanf而非带错误参数的printf,输出需匹配对应格式占位符 - C语句末尾必须添加分号
核心实现思路
要计算i^i且不依赖pow(),需通过循环累乘实现精确整数幂计算,同时要注意普通int类型会快速溢出(比如10^10已超出int的最大取值范围),因此必须使用更大的数据类型存储结果。
具体实现步骤
- 替换数据类型:用
unsigned long long存储求和结果和幂次中间值(若N超过20,可尝试编译器支持的__int128类型) - 实现
i^i计算:对每个i,通过循环将i连续相乘i次,得到精确幂值 - 累加每个i的幂值到总和中
完整代码示例
#include <stdio.h> int main() { int i = 1, n; unsigned long long sum = 0; printf("Number: "); scanf("%d", &n); while (i <= n) { unsigned long long power = 1; // 循环累乘计算i的i次方 for (int j = 0; j < i; j++) { power *= i; // 可选:溢出检查,避免结果异常 if (power / i != power / i) { printf("溢出警告:当前N过大,无法精确计算\n"); return 1; } } sum += power; i++; } printf("Sum is: %llu\n", sum); return 0; }
补充说明
- 若N超过20,
unsigned long long也会溢出,此时可使用__int128类型(GCC、Clang等编译器支持),输出时需自行实现__int128的打印函数 - 循环累乘是保证整数幂精确性的可靠方式,
pow()基于浮点数计算,会丢失精度,不适合此类需求
内容的提问来源于stack exchange,提问作者Joao Torres
相关产品推荐
相关产品推荐

