标题:关于求100!的准确值,怎样才能使不溢出?
只看楼主
LGing
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:32
专家分:107
注 册:2015-3-15
结帖率:100%
已结贴  问题点数:20 回复次数:5 
关于求100!的准确值,怎样才能使不溢出?
这个代码怎么写?求助
2015-04-12 11:10
wp231957
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:神界
等 级:版主
威 望:422
帖 子:13681
专家分:53296
注 册:2012-10-18
得分:7 
字符模拟

DO IT YOURSELF !
2015-04-12 11:16
LGing
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:32
专家分:107
注 册:2015-3-15
得分:0 
是用数组吗?
2015-04-12 11:23
可口可楽
Rank: 2
等 级:论坛游民
帖 子:4
专家分:50
注 册:2015-2-6
得分:7 
字符模拟手工运算
2015-04-12 11:43
zklhp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:china
等 级:贵宾
威 望:254
帖 子:11485
专家分:33241
注 册:2007-7-10
得分:7 
最简单的方法是用大数库
2015-04-12 12:24
荒芜
Rank: 2
等 级:论坛游民
帖 子:3
专家分:20
注 册:2015-5-9
得分:0 
//把数字上的个、十、百拆开存放在数组中,再逆序输出
#include <stdio.h>
int a[200]; //确保保存最终运算结果的数组足够大

int main(void)
{
    int n; //阶乘大小
    int i,j;
    int carry; //进位
    int digit = 1; //位数
    int temp; //阶乘的任一元素与临时结果的某位的乘积结果

    printf("请输入n的大小:");
    scanf("%d",&n);//从键盘接收阶乘大小
    a[0] = 1; //将结果先初始化为1
    for( i = 2; i <= n; ++i) //开始阶乘,阶乘元素从2开始依次“登场”
    {
    //按最基本的乘法运算思想来考虑,将临时结果的每位与阶乘元素相乘
        for( j = 1, carry = 0; j <= digit; ++j)
        {
            temp = a[j-1] * i + carry ; //相应阶乘中的一项与当前所得临时结果的某位相乘(加上进位)
            a[j-1] = temp % 10; //更新临时结果的位上信息
            carry = temp / 10; //看是否有进位
        }
        while(carry) //如果有进位
        {
            ++digit; //位数加一
            a[digit-1] = carry % 10; //添加信息。位数增1   
            carry /= 10; //看还能不能进位(逢十进一)
        }
    }
    printf("结果是:\n%d ! = ",n); //显示结果
    for( i = digit; i >=2; --i)
    {
        printf("%d",a[i-1]);
    }
    printf("%d\n", a[0]);
    return 0;
 }
2015-05-12 21:43



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-443888-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.661707 second(s), 7 queries.
Copyright©2004-2025, BCCN.NET, All Rights Reserved