| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 532 人关注过本帖
标题:关于求100!的准确值,怎样才能使不溢出?
只看楼主 加入收藏
LGing
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:32
专家分:107
注 册:2015-3-15
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:5 
关于求100!的准确值,怎样才能使不溢出?
这个代码怎么写?求助
2015-04-12 11:10
wp231957
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:神界
等 级:贵宾
威 望:423
帖 子:13688
专家分:53332
注 册: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
快速回复:关于求100!的准确值,怎样才能使不溢出?
数据加载中...
 
   



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

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