白小彦 发表于 2023-3-19 09:35:28

求助

遇到这样的长的数字该怎么办,求大神解救

isdkz 发表于 2023-3-19 09:35:29

可以使用数组或字符串来实现高精度数值计算。

示例代码如下:
#include <stdio.h>

#define MAX_DIGITS 10000

int main() {
    int n = 35;
    int i, j, k;
    int carry = 0, len = 1;

    int result = {1};

    // 计算阶乘
    for (i = 2; i <= n; i++) {
      carry = 0;
      for (j = 0; j < len; j++) {
            k = result * i + carry;
            result = k % 10;
            carry = k / 10;
      }
      while (carry > 0) {
            result = carry % 10;
            carry /= 10;
            len++;
      }
    }

    // 输出结果
    printf("%d的阶乘为", n);
    for (i = len - 1; i >= 0; i--) {
      printf("%d", result);
    }
    printf("\n");

    return 0;
}


在上面的代码中,我们使用一个长度为MAX_DIGITS的数组result来保存高精度整数。

我们首先将result数组初始化为1,并从2开始循环,逐个计算每个数字的乘积,将结果保存到result数组中。

在计算乘积时,我们使用carry变量来保存进位,使用len变量来保存高精度整数的位数。

如果计算结果产生了进位,我们将进位保存到carry变量中,并将carry变量在下一位计算中使用。

如果乘积的结果超过了一位数,我们将低位保存到当前位置的数组元素中,并将高位保存到下一位的数组元素中。

最后,我们使用循环遍历result数组,将计算结果输出到控制台。

需要注意的是,使用数组实现高精度数值计算可能会导致计算速度变慢,因为它需要更多的计算和内存来保存结果。

另外,在计算大型数字时,您需要增加MAX_DIGITS的值以确保数组不会溢出。

歌者文明清理员 发表于 2023-3-19 09:38:07

图片看不清,代码贴上来
页: [1]
查看完整版本: 求助