鱼C论坛

 找回密码
 立即注册
查看: 2041|回复: 2

[已解决]求助

[复制链接]
发表于 2023-3-19 09:35:28 | 显示全部楼层 |阅读模式
5鱼币
遇到这样的长的数字该怎么办,求大神解救
最佳答案
2023-3-19 09:35:29
可以使用数组或字符串来实现高精度数值计算。

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

  2. #define MAX_DIGITS 10000

  3. int main() {
  4.     int n = 35;
  5.     int i, j, k;
  6.     int carry = 0, len = 1;

  7.     int result[MAX_DIGITS] = {1};

  8.     // 计算阶乘
  9.     for (i = 2; i <= n; i++) {
  10.         carry = 0;
  11.         for (j = 0; j < len; j++) {
  12.             k = result[j] * i + carry;
  13.             result[j] = k % 10;
  14.             carry = k / 10;
  15.         }
  16.         while (carry > 0) {
  17.             result[len] = carry % 10;
  18.             carry /= 10;
  19.             len++;
  20.         }
  21.     }

  22.     // 输出结果
  23.     printf("%d的阶乘为", n);
  24.     for (i = len - 1; i >= 0; i--) {
  25.         printf("%d", result[i]);
  26.     }
  27.     printf("\n");

  28.     return 0;
  29. }
复制代码


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

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

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

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

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

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

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

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

最佳答案

查看完整内容

可以使用数组或字符串来实现高精度数值计算。 示例代码如下: 在上面的代码中,我们使用一个长度为MAX_DIGITS的数组result来保存高精度整数。 我们首先将result数组初始化为1,并从2开始循环,逐个计算每个数字的乘积,将结果保存到result数组中。 在计算乘积时,我们使用carry变量来保存进位,使用len变量来保存高精度整数的位数。 如果计算结果产生了进位,我们将进位保存到carry变量中,并将carry变量在下一位 ...
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2023-3-19 09:35:29 | 显示全部楼层    本楼为最佳答案   
可以使用数组或字符串来实现高精度数值计算。

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

  2. #define MAX_DIGITS 10000

  3. int main() {
  4.     int n = 35;
  5.     int i, j, k;
  6.     int carry = 0, len = 1;

  7.     int result[MAX_DIGITS] = {1};

  8.     // 计算阶乘
  9.     for (i = 2; i <= n; i++) {
  10.         carry = 0;
  11.         for (j = 0; j < len; j++) {
  12.             k = result[j] * i + carry;
  13.             result[j] = k % 10;
  14.             carry = k / 10;
  15.         }
  16.         while (carry > 0) {
  17.             result[len] = carry % 10;
  18.             carry /= 10;
  19.             len++;
  20.         }
  21.     }

  22.     // 输出结果
  23.     printf("%d的阶乘为", n);
  24.     for (i = len - 1; i >= 0; i--) {
  25.         printf("%d", result[i]);
  26.     }
  27.     printf("\n");

  28.     return 0;
  29. }
复制代码


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

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

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

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

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

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

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

另外,在计算大型数字时,您需要增加MAX_DIGITS的值以确保数组不会溢出。
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2023-3-19 09:38:07 | 显示全部楼层
图片看不清,代码贴上来
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-4-22 17:56

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表