【问题描述】 
对于任意给定的n值(n为整数,且1<=n<=100),计算并显示n!(阶乘)的值。 
【样例】
输入:n= 10
输出: 3628800
又输入:n= 20
输出: 2432902008176640000

使用整型数组来存储大数类的每一位,并模拟手工乘法的全过程。。

#include "stdio.h"
#include "stdlib.h"const unsigned int MAX = 10000;            //整型数组的最大长度
const long long WIDTHMAX = 1000000000;     //整型数组val[MAX]的元素上限
const unsigned int WIDTH = 9;              //输出整型数组val[MAX]的元素时的格式宽度,即整型数组val[MAX]的元素的最多位数 typedef struct node
{long long val[MAX];       //用来存储高精度整数 unsigned int size;        //整型数组的实际长度
}BigInt;void PrintBigInt(const BigInt & a);    //输出大数类
BigInt MulBigInt(const BigInt & a, const BigInt & b);     //大数类相乘
BigInt FacBigInt(unsigned int n);           //大数类求阶乘void PrintBigInt(const BigInt & a)
{unsigned w;int i;printf("%lld",a.val[a.size-1]);for (i=a.size-2; i>=0; i--){w = WIDTHMAX / 10;while (w > 0){if (a.val[i] >= w)break;printf("0");w /= 10;}printf("%lld",a.val[i]);}printf("\n");
}/*
函数名称:MulBigInt
函数功能:高精度整数乘法
输入参数:const BigInt & a:用整型数组表示的高精度整数被乘数 const BigInt & b:用整型数组表示的高精度整数乘数
输出参数:BigInt:返回用整型数组表示的高精度整数乘积
*/
BigInt MulBigInt(const BigInt & a, const BigInt & b)
{int i,j;BigInt c;if (a.size == 1 && a.val[0] == 0)return a;if (b.size == 1 && b.val[0] == 0)return b;for (i=0; i<MAX; i++)    //全部赋初值为0 c.val[i] = 0;for ( i=0, j=0; i<b.size; i++){for (j=0; j<a.size; j++){c.val[i+j] += a.val[j] * b.val[i]; c.val[i+j+1] += c.val[i+j] / WIDTHMAX; c.val[i+j] %= WIDTHMAX; }c.size = i + j;if (c.val[c.size] != 0)    //最高位有进位 c.size++;}return c;
}/*
函数名称:FacBigInt
函数功能:高精度整数阶乘
输入参数:unsigned int n:正整数
输出参数:BigInt:返回用整型数组表示的高精度整数阶乘
*/
BigInt FacBigInt(unsigned int n)
{unsigned long long i;BigInt s, c;c.size = s.size = 1;s.val[0] = 1;for (i=2; i<=n; i++){c.val[0] = i;s = MulBigInt(s, c);}return s;
}int main(void)
{BigInt a;unsigned int n;printf("请输入n值:");scanf("%u",&n);a=FacBigInt(n);printf("%u的阶乘为:\n",n);PrintBigInt(a);system("pause");return 0;
}

方法二:

#include<iostream>
using namespace std;#define MAX 1000int main(void)
{int n;while(scanf("%d",&n) == 1 && n >= 0){int i,j;int a[MAX];      //存数运算结果int p , add;           //p存储当前结果的位数,add为进位a[1] = 1;p = 1; for(i = 2 ; i <= n ; ++i)   //循环与2,3,4.....n相乘{for(j = 1 , add = 0 ; j <= p ; ++j)    //让a[]的每位与i相乘{a[j] = a[j] * i + add;add = a[j] / 10;a[j] = a[j] % 10;}while(add > 0)         //如果h不为0{a[j] = add % 10;add = add / 10;++j;}p = j - 1;            //将当前的位数赋给p}for(i = p ; i >= 2 ; --i)    //a[]数组的前面是低位,后面高位{printf("%d",a[i]);}printf("%d\n",a[i]);}return 0;
}

用高精度方法计算n! ,并显示n!(阶乘)的值。相关推荐

  1. Java黑皮书课后题第6章:6.11(金融应用:计算酬金)编写方法,利用编程练习题5.39中的方法计算酬金。方法头如下所示。编写程序,显示下面表格

    6.11(金融应用:计算酬金)编写方法,利用编程练习题5.39中的方法计算酬金.方法头如下所示.编写程序,显示下面表格 题目 题目描述与运行示例 编程练习题5.39(非本题) 破题 5.39处理 主方 ...

  2. js小数运算出现多为小数问题_js小数计算小数点后显示多位小数的实现方法

    首先写一个demo 重现问题,我使用的是一个js在线测试环境[打开] 改写displaynum()函数 function displaynum(){var num = 22.77;alert(num ...

  3. 用天文方法计算二十四节气

    二十四节气在中国古代历法中扮演着非常重要的角色,本文将介绍二十四节气的基本知识,以及如何使用VSOP82/87行星运行理论计算二十四节气发生的准确时间. 中国古代历法都是以月亮运行规律为主,严格按照朔 ...

  4. [转]天文方法计算二十四节气

    转自吹泡泡的小猫,原文地址:http://blog.csdn.net/orbit/article/details/7910220 二十四节气在中国古代历法中扮演着非常重要的角色,本文将介绍二十四节气的 ...

  5. 【转】用天文方法计算二十四节气(上)

    转载地址:https://blog.csdn.net/orbit/article/details/7910220 二十四节气在中国古代历法中扮演着非常重要的角色,本文将介绍二十四节气的基本知识,以及如 ...

  6. oRbIt 的专栏 用天文方法计算二十四节气(上)

    http://blog.csdn.net/orbit/article/details/7910220 二十四节气在中国古代历法中扮演着非常重要的角色,本文将介绍二十四节气的基本知识,以及如何使用VSO ...

  7. 算法系列之十八:用天文方法计算二十四节气(上) .

    二十四节气在中国古代历法中扮演着非常重要的角色,本文将介绍二十四节气的基本知识,以及如何使用VSOP82/87行星运行理论计算二十四节气发生的准确时间. 中国古代历法都是以月亮运行规律为主,严格按照朔 ...

  8. 算法系列之十八:用天文方法计算二十四节气(上)

    二十四节气在中国古代历法中扮演着非常重要的角色,本文将介绍二十四节气的基本知识,以及如何使用VSOP82/87行星运行理论计算二十四节气发生的准确时间. 中国古代历法都是以月亮运行规律为主,严格按照朔 ...

  9. 创建一个圆类Circle的对象,分别设置圆的半径计算并分别显示圆半径、圆面积、圆周长。...

    编写一个圆类Circle,该类拥有: ①一个成员变量 Radius(私有,浮点型): // 存放圆的半径: ②两个构造方法 Circle( ) // 将半径设为0 Circle(double r ) ...

最新文章

  1. ggplot2可视化分面图(faceting)使用label_wrap_gen函数设置每个分面图的子图标题自动换行为多行文本(基于设定的当行宽度进行标题文本自动换行)
  2. 文本深度表示模型Word2Vec 简介 Word2vec 是 Google 在 2013 年年中开源的一款将词表征为实数值向量的高效工具, 其利用深度学习的思想,可以通过训练,把对文本内容的处理简
  3. Haskell语言实现判断一个整数是否是质数的代码及运行结果
  4. 键盘敲入 A 字母时,操作系统期间发生了什么...
  5. 创建虚机时间_云原生虚机应用托管设计篇
  6. SequoiaDB 系列之五 :源码分析之main函数
  7. [Beego模型] 三、高级查询
  8. 关于RocketMQ消费者消费队列的消费起始位置源码分析
  9. 莫兰迪配色RGB对照表
  10. CANTest及CANPro软件滤波设置说明
  11. 普通文件与迅雷、旋风、快车、RayFile的下载地址转换算法
  12. c语言里面temp是什么文件夹,Temp文件夹是什么?Windows下Temp文件夹可以删除吗?...
  13. 如何将cocos、spine等骨骼文件转换成Egret引擎使用的 dragonbones的骨骼文件
  14. TVS管选型详细流程
  15. flash loader下载使用说明
  16. Matlab虚拟现实工具箱——没有VRML Editor时的使用办法(应该是Simulink 3D Animation Demo版本的都是这样)
  17. va_list、va_start和va_end的用法
  18. 单点登录系统设计及实现
  19. 两台电脑互传文件你还可以这么做
  20. 使用eclipse遇到问题:the-package-collides-with-a-type

热门文章

  1. Applese 涂颜色(欧拉定理降幂+快速幂)
  2. android多语言编码格式,在Android中使用国家/地区代码以编程方式更改语言
  3. 「技术人生」:技术同学应该如何理解业务?
  4. 浩鲸科技基于ChaosBlade的混沌工程实践
  5. 冯诺依曼架构的 IO 鸿沟,谁能来填补?
  6. 在地理文本处理技术上,高德有哪些技巧?
  7. 【译】Celeste 手感的 10 个设计细节
  8. 各行业2021薪酬报告来了,三大高薪行业令人羡慕
  9. PHP酒店管理demo案例(数组遍历)
  10. 查看http的并发请求数与其TCP连接状态