高精度整数运算
2017-03-05 20:36
239 查看
问题描述
输入一个正整数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
public class Text09 { private static int a; private static int[] big_num = new int[400]; public static void main(String[] args) { big_num[0] = 1; Scanner sc = new Scanner(System.in); a = sc.nextInt(); sc.close(); //外层循环 for(int i=2; i<=a; i++){ int n = 0; for(int j=0; j<big_num.length; j++){ int temp = big_num[j] * i + n; big_num[j] = temp % 10; n = temp / 10; } } boolean keep = false; for(int i=big_num.length-1; i>=0; i--){ if(keep){ System.out.print(big_num[i]); continue; } if(big_num[i-1] != 0){ keep = true; } } } }
相关文章推荐
- [算法设计与分析]3.2.4大整数存储及运算(高精度*长整数+n!)
- 高精度整数运算改进版(转)
- 高精度整数运算改进版
- 整数高精度运算的库(加法,减法,乘法,除法,取模)
- 实用算法实现-第 24 篇 高精度整数运算
- 高精度整数运算改进版
- 大整数运算(高精度运算)
- 实用算法实现-第 24 篇 高精度整数运算
- 高精度运算总结(10.21更新整数乘法)
- 高精度整数运算
- 正整数高精度运算
- 高精度整数运算改进版
- 大整数运算||高精度运算
- c语言高精度大整数加法运算
- 算法题: 求一个整数数组中,通过元素加减运算得到指定结果的所有运算过程. 例如【5,4,6,7,1】= 9 ?
- 输入一个32位的整数啊,使用按位异或运算,生成一个新的32位整数b,使得该整数b的每一位等于原整数a中该位左右两边两个bit位的异或结果
- 位运算实现小正整数乘法
- 高精度整数去位去最小问题
- uva 748 Exponentiation 浮点数乘方运算 高精度水题
- 用位运算实现两个整数的加法运算