用高精度方法计算n! ,并显示n!(阶乘)的值。
2012-02-29 23:41
531 查看
【问题描述】
对于任意给定的n值(n为整数,且1<=n<=100),计算并显示n!(阶乘)的值。
【样例】
输入:n= 10
输出: 3628800
又输入:n= 20
输出: 2432902008176640000
使用整型数组来存储大数类的每一位,并模拟手工乘法的全过程。。
对于任意给定的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; }
相关文章推荐
- 用高精度方法计算n! ,并显示n!(阶乘)的值。
- 用高精度方法计算n! ,并显示n!(阶乘)的值。
- 蓝桥杯基础练习 阶乘计算(高精度方法)
- python学习——计算阶乘的几种方法
- 递归的定义以及递归的示例(计算阶乘、计算斐波那契数、递归二分查找、回文串递归方法解决、汉诺塔问题、递归选择排序问题)
- 阶乘计算(高精度)
- [iOS]CTFramesetterSuggestFrameSizeWithConstraints计算文本显示所占区域修正方法
- 回顾基础知识——实现阶乘计算的几种方法
- java中递归方法的应用--计算n的阶乘
- C#递归实现显示文件夹及所有文件并计算其大小的方法
- Silverlight画几何图形,显示中间过程(计算两个Point的距离,画虚线的方法)
- HDU 1042 N!(高精度计算阶乘)
- 使用方法与键盘输入计算5的阶乘
- HDU 1042 N!(高精度计算阶乘)
- HDU 1042 N!(高精度计算阶乘)
- 计算字符串在界面上显示的长宽方法
- 利用递归方法计算 阶乘
- 一种高精度低复杂度的非线性函数定点计算方法
- Android listview只显示一行的解决方法(计算listview的高度)
- 高精度计算——数据的接受方法和存储方法