题目1076:N的阶乘
时间限制:3 秒
内存限制:128 兆
特殊判题:否
提交:4722
解决:1578
-
题目描述:
-
输入一个正整数N,输出N的阶乘。
-
输入:
-
正整数N(0<=N<=1000)
-
输出:
-
输入可能包括多组数据,对于每一组输入数据,输出N的阶乘
-
样例输入:
-
4 5 15
-
样例输出:
-
24 120 1307674368000
Java 的实现
import java.math.BigInteger; import java.util.Scanner; public class Main{ /** * @param args */ public static void main(String[] args) { Scanner scanner = new Scanner(System.in); while( scanner.hasNext() ){ int n = scanner.nextInt(); BigInteger result = new BigInteger("1"); for (int i = 1; i <= n; i++) { result = result.multiply(new BigInteger(String.valueOf(i))); } System.out.println(result); } } } /************************************************************** Problem: 1076 User: yihukurama Language: Java Result: Accepted Time:3860 ms Memory:111996 kb ****************************************************************/
自己的实现(机试通过不鸟T T算1000的阶乘跟Java的一样的!)package com.jude.online.alfred.jobdu; import java.util.Scanner; public class NO1076 { /** * @param args */ public static void main(String[] args) { Scanner scanner = new Scanner(System.in); while( scanner.hasNext() ){ int n = scanner.nextInt(); BigNum result = new BigNum("1"); for (int i = 1; i <= n; i++) { result = result.mutiBigNum(i); } System.out.println(result); } } public static class BigNum{ public int digit[]; public int size; public BigNum(String num){ digit = new int[1000]; size = 0; initNum(num); } public BigNum(){ digit = new int[1000]; size = 0; } private void initNum(String num) { for (int i = num.length(); i >0; i-=4) { int end = i; int start = i-4 >0? i-4 : 0; String tempValue = num.substring(start, end); digit[size++] = Integer.parseInt(tempValue); } } public String toString(){ String s; s = String.valueOf(digit[size-1]); for (int i = size-2; i >=0; i--) { s+=digit[i]; } return s; } public BigNum mutiBigNum(int b){ BigNum ret = new BigNum(); int carry = 0; for (int i = 0; i < size; i++) { int temp = digit[i]*b+carry; carry = temp/10000; temp%=10000; ret.digit[ret.size++] = temp; } if(carry != 0){ ret.digit[ret.size++] = carry; } return ret; } } }