鱼C论坛

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

[已解决]求助

[复制链接]
发表于 2023-3-19 09:35:28 | 显示全部楼层 |阅读模式
5鱼币
遇到这样的长的数字该怎么办,求大神解救
最佳答案
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[MAX_DIGITS] = {1};

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

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

    return 0;
}

在上面的代码中,我们使用一个长度为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变量在下一位 ...
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 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[MAX_DIGITS] = {1};

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

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

    return 0;
}

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

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

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

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

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

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

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

另外,在计算大型数字时,您需要增加MAX_DIGITS的值以确保数组不会溢出。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-3-19 09:38:07 | 显示全部楼层
图片看不清,代码贴上来
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-12-25 09:07

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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