求较大数的阶乘
来源:互联网 发布:2017网络歌手排行榜 编辑:程序博客网 时间:2024/04/30 10:02
问题描述
其中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
java代码实现
package mec.lanqiao;import java.util.ArrayList;import java.util.List;import java.util.Scanner;public class Main { public static List<Integer> list = new ArrayList<>(); static void f(int n ) { if (n == 1) return; // 将所有的位乘上n并保存 for (int i = 0; i < list.size(); i++) { list.set(i , list.get(i) * n); } // 进位操作 for (int i = 0; i < list.size() - 1; i++) { int x = list.get(i); list.set(i , x % 10); list.set(i + 1, x / 10 + list.get(i + 1)); } // 处理表最后一个数(最高位的数字) int last = list.get(list.size() - 1); if (last > 9) { int newLast = last % 10; list.set(list .size() - 1, newLast); String str = String. valueOf(last / 10); for (int i = str .length() - 1; i >= 0; i--) { list.add(Integer.valueOf( str.charAt( i) + "")); } } f(n - 1); } // 打印结果 static void print(List<Integer> list ) { for (int i = list .size() - 1; i >= 0; i--) { System. out.print(list .get(i )); } } public static void main(String[] args) { // init 将表初始化为[1, 0]便于递归中启动进位循环 list.add(1); list.add(0); Scanner scan = new Scanner(System.in); int n = scan .nextInt(); scan.close(); f(n); print(list); }}
0 0
- 求较大数的阶乘
- 求任意数的阶乘
- 求一个数的阶乘
- 求一个数的阶乘
- 求一个数的阶乘
- 求一个数的阶乘
- 求一个数的阶乘
- 求一个数的阶乘
- 求一个数的阶乘
- 求一个数的阶乘
- 求一个数的阶乘
- 求一个数的阶乘
- 求一个数的阶乘
- 求某个数的阶乘
- 求一个数的阶乘
- 求a,b两个数中较大的数
- 用递归求一个数的阶乘!
- 求阶乘数包含0的个数
- C++11 智能指针——(C++98)auto_ptr
- 利用系统自带的UITabBarController纯代码搭建TabBar
- HDOJ 1220-Cube【数学推理】
- j2ee 使用db.properties连接mysql数据库
- 屏幕截图
- 求较大数的阶乘
- Android,iOS打开手机QQ与指定用户聊天界面(联系客服)
- UESTC P酱的冒险旅途 785 (规律模拟)
- 在水晶报表中使用Code128条形码
- 排序算法稳定性定义及分析
- android编译与反编译
- 查看Ubuntu版本
- Android几种在其他线程中更新UI的方法
- Android开发学习之路--【前言】