biaolulei9980 2017-10-27 08:24 采纳率: 0%
浏览 2738
已结题

c语言 1000的阶乘 代码

#include "stdafx.h"

int a[100000]; //保存最终运算结果的数组
int main()
{
int n; //需要求阶乘的数字
int jinwei; //进位
int weishu = 1; //位数
int temp, i, j; //temp为阶乘的任一元素与临时结果的某位的乘积结果
scanf("%d", &n); //接收阶乘次数
a[0] = 1; //将结果先初始化为1
for (i = 1; i <= n; i++) //开始阶乘,阶乘元素从2开始依次登场 (正常循环)
{
//按乘法运算思想来考虑,将临时结果的每位与阶乘元素相乘

for (j = 1, jinwei = 0; j <= weishu; j++)
{
temp = a[j - 1] * i+jinwei ; //相应阶乘中的一项与当前所得临时结果的某位相乘(加上进位)
a[j - 1] = temp % 10; //更新临时结果的位上信息
jinwei = temp / 10; //看是否有进位
}
while (jinwei) //如果有进位
{
a[++weishu - 1] = jinwei % 10; //新加一位,添加信息。位数增1
jinwei /= 10; //看还能不能进位
}
}
printf("结果是:\n"); //显示结果
for (i = weishu; i >= 1; i--)
{
printf("%d", a[i - 1]);
}
}

 for (i = 1; i <= n; i++) //开始阶乘,阶乘元素从2开始依次登场   (正常循环)
    {
        //按乘法运算思想来考虑,将临时结果的每位与阶乘元素相乘  
        for (j = 1, jinwei = 0; j <= weishu; j++)
        {
            temp = a[j - 1] * i+jinwei ; //相应阶乘中的一项与当前所得临时结果的某位相乘(加上进位)
            a[j - 1] = temp % 10; //更新临时结果的位上信息
            jinwei = temp / 10; //看是否有进位
        }
        while (jinwei) //如果有进位
        {
            a[++weishu - 1] = jinwei % 10; //新加一位,添加信息。位数增1
            jinwei /= 10; //看还能不能进位
        }
    }

这2段代码 理解不是很透彻 麻烦能讲的更加透彻 易懂

  • 写回答

6条回答 默认 最新

  • 肥宅_Sean 2017-10-28 06:23
    关注

    我自己写了一个,放到了我的博客上
    高精度乘法--n!
    博客内有算法解析
    具体代码如下:

    #include <iostream>
    #include <cstring> 
    using namespace std;
    int num[10000] = {0}, size;
    int main(){
        unsigned int n; // 算n!
        cin >> n; // n要大于等于0 
        num[0] = 1;
        size = 1;
        for (int i = 2; i <= n; ++i) {
            int flag = 0;
            for (int j = 0; j < size; ++j) {
                num[j] *= i;
                num[j] += flag % 10; // 要flag的后一位 
                flag /= 10; 
                flag += num[j] / 10;
                num[j] = num[j] % 10; 
            }
            while(flag) {
                num[size++] = flag % 10;
                flag /= 10;
            }
        }
        for (int i = size-1;i >= 0;--i) {
            cout << num[i];
        }
        cout << endl;
    }
    
    
    评论

报告相同问题?

悬赏问题

  • ¥15 求解 yolo算法问题
  • ¥15 虚拟机打包apk出现错误
  • ¥30 最小化遗憾贪心算法上界
  • ¥15 用visual studi code完成html页面
  • ¥15 聚类分析或者python进行数据分析
  • ¥15 逻辑谓词和消解原理的运用
  • ¥15 三菱伺服电机按启动按钮有使能但不动作
  • ¥15 js,页面2返回页面1时定位进入的设备
  • ¥50 导入文件到网吧的电脑并且在重启之后不会被恢复
  • ¥15 (希望可以解决问题)ma和mb文件无法正常打开,打开后是空白,但是有正常内存占用,但可以在打开Maya应用程序后打开场景ma和mb格式。