网页资讯视频图片知道文库贴吧地图采购
进入贴吧全吧搜索

 
 
 
日一二三四五六
       
       
       
       
       
       

签到排名:今日本吧第个签到,

本吧因你更精彩,明天继续来努力!

本吧签到人数:0

一键签到
成为超级会员,使用一键签到
一键签到
本月漏签0次!
0
成为超级会员,赠送8张补签卡
如何使用?
点击日历上漏签日期,即可进行补签。
连续签到:天  累计签到:天
0
超级会员单次开通12个月以上,赠送连续签到卡3张
使用连续签到卡
06月02日漏签0天
radasm吧 关注:747贴子:901
  • 看贴

  • 图片

  • 吧主推荐

  • 游戏

  • 6回复贴,共1页
<<返回radasm吧
>0< 加载中...

求10000的阶乘(c语言代码实现)

  • 只看楼主
  • 收藏

  • 回复
  • 飘香夜梦
  • 仗剑天涯
    3
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
/*
程序功能:计算一个正整数n的阶乘,目前最大能运算10000的阶乘,可秒杀。
程序意义:加强自己对于大数的处理。
说明:此程序对乘法和除法还未做任何优化,如果用上位运算的知识应该可以继续优化。 */ #include <stdio.h> #define N 10000//宏定义数组长度 int main()
{
int nResult[N] = {0};//必须用一个足够大的数组来存储计算结果来确保计算结果不会溢出
int nDigit = 1; //位数
int nTemp = 0;//阶乘的任一元素与临时结果的某位的乘积结果
int i = 0;
int j = 0;
int nCarry = 0;//进位
int nNum = 0;
printf("Please input n:");
scanf("%d", &nNum);
nResult[0] = 1;//先将结果初始化为1
for (i = 2; i <= nNum; i++)//开始阶乘,阶乘元素从2开始一次“登场”
{
//按最基本的乘法运算思想来考虑,将临时结果的每位与阶乘元素相乘
for (j = 1, nCarry = 0; j <= nDigit; j++)
{
nTemp = nResult[j - 1]*i + nCarry;//相应阶乘中的一项与当前所得临时结果的某位相乘且加上进位
nResult[j - 1] = nTemp % 100000;//更新临时结果的位上信息
nCarry = nTemp / 100000;//看是否有进位
}
while (nCarry)//判断当前临时结果的最高位是否有进位
{
nResult[nDigit++] = nCarry % 100000;//新增一位
nCarry /= 100000;//看是否还能继续进位
}
}
for (i = nDigit; i >= 1; i--)//显示结果
{
printf("%d", nResult[i - 1]); if (0 == nResult[i - 1])
{
printf("0000");//因为每个数组元素存储5位数字,每次输出项为0时需补上缺少的4个零
}
}
printf("\r\n");
return 0;
}


  • bingghost
  • 英雄豪杰
    10
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
big Number


2026-06-02 10:40:27
广告
不感兴趣
开通SVIP免广告
  • 迷途的一只羊
  • 后起之秀
    7
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
printf("%5d", ); 这样就可以每次输出5位,不够的话,用0填。


  • 忧与爱7
  • 无名之辈
    2
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼


  • chufeng_t
  • 初涉江湖
    1
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
代入10000,显示会不会溢出?为什么计算结果不对?


  • 火可天
  • 人中龙凤
    11
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
顶


  • 残ぁ雪お
  • 初涉江湖
    1
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
答案错误。。。


登录百度账号

扫二维码下载贴吧客户端

下载贴吧APP
看高清直播、视频!
  • 贴吧页面意见反馈
  • 违规贴吧举报反馈通道
  • 贴吧违规信息处理公示
  • 6回复贴,共1页
<<返回radasm吧
分享到:
©2026 Baidu贴吧协议|隐私政策|吧主制度|意见反馈|网络谣言警示