阶乘计算
2018-01-26 16:25
253 查看
问题描述
输入一个正整数n,输出n!的值。
其中n!=1*2*3*…*n。
算法描述
n!可能很大,而计算机能表示的整数范围有限,需要使用高精度计算的方法。使用一个数组A来表示一个大整数a,A[0]表示a的个位,A[1]表示a的十位,依次类推。
将a乘以一个整数k变为将数组A的每一个元素都乘以k,请注意处理相应的进位。
首先将a设为1,然后乘2,乘3,当乘到n时,即得到了n!的值。
输入格式
输入包含一个正整数n,n<=1000。
输出格式
输出n!的准确值。
样例输入
10
样例输出
3628800
输入一个正整数n,输出n!的值。
其中n!=1*2*3*…*n。
算法描述
n!可能很大,而计算机能表示的整数范围有限,需要使用高精度计算的方法。使用一个数组A来表示一个大整数a,A[0]表示a的个位,A[1]表示a的十位,依次类推。
将a乘以一个整数k变为将数组A的每一个元素都乘以k,请注意处理相应的进位。
首先将a设为1,然后乘2,乘3,当乘到n时,即得到了n!的值。
输入格式
输入包含一个正整数n,n<=1000。
输出格式
输出n!的准确值。
样例输入
10
样例输出
3628800
#include <stdio.h> int main(int argc, char *argv[]) { //n为1000时需要929位来表示 int n = 0, length = 0, result[1000] = {0}, cf[1000] = {0}; result[0] = 1; length = 1; scanf("%d", &n); for (int i = 1; i < n + 1; i++) { for (int j = 0; j < length; j++) { cf[j] = (result[j] * i) / 10; result[j] = (result[j] * i) % 10; } if (cf[length - 1] != 0) { length++; } for (int j = 1; j < length; j++) { result[j] += cf[j - 1]; cf[j - 1] = 0; if (result[j] >= 10) { result[j] = (result[j]) % 10; cf[j]++; } } } for (int i = 0; i < length; i++) { printf("%d", result[length - 1 - i]); } return 0; }
相关文章推荐
- 大数据的加法、减法、乘法以及阶乘的计算问题(源代码附上)
- java实现阶乘的计算,抛出异常不会,怎么使用标号跳转,需要帮解决一下
- 阶乘计算
- 阶乘计算(高精度)
- L1-013. 计算阶乘和
- (函数题)4-10 阶乘计算升级版
- 可以计算阶乘次方的大数计算器
- N的阶乘算法(能计算到100000)
- 基础练习 阶乘计算
- 计算n的阶乘尾数的0的个数
- 1!+2!+...+30! 计算从1到n个数的阶乘的总和
- 28、利用递归计算自然数 n 的阶乘
- 团队天梯赛L1-013. 计算阶乘和
- 计算N的阶乘(大数)
- 【经典智力题】1024! 末尾有多少个0?——“计算阶乘末尾0的数量”问题引出
- 利用数组计算256的阶乘
- HDU--1018--Big number!(计算阶乘结果的位数)
- Java计算1-n个数阶乘的和
- 编译运行内核里面的helloworld以及使用递归计算阶乘
- angular学习笔记(五)-阶乘计算实例(2)