You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.22 03:34:59