输入N求N的阶乘的准确值。
Input
输入N(1 <= N <= 10000)
Output
输出N的阶乘
Sample Input
5
Sample Output
120
分析: 这题看到的时候,就知道要用一个数组存储结果然后再输出,因为结果长度太大了,但是这题使用Java的话会比较简单, 因 为Java有一个大数类,基本上只要计算机能显示数据都可以存储计算,所以我就直接套用了,看代码吧:
import java.math.BigInteger;
import java.util.*;
public class Main {
static Scanner in = new Scanner(System.in);
public static void main(String[] args) {
int n = in.nextInt();
BigInteger sum = BigInteger.ONE;
for(int i = 1; i <= n;i++) {
sum = sum.multiply(BigInteger.valueOf(i));
}
String s = sum.toString();
//System.out.println(s.length());
char[] c= s.toCharArray();
for(int k = 0;k<s.length();k++) {
System.out.print(c[k]);
}
}
}
思考:是挺简单的,下面看看普通的数组解法
using namespace std;
void main()
{
int result[40000]; //保存结算结果的数组
int height = 1; //结果的最高位
int num; //计算阶乘的数字
cin>>num;
result[0] = 1;
for (int i=1;i<=num;i++)
{
int res = 0; //进位
for (int j=0;j<height;j++)
{
int buf = result[j] * i + res; //计算结果
result[j] = buf % 10; //取当前位
res = buf / 10; //计算进位
}
while (res)
{
result[height++] = res % 10; //取当前位
res /= 10; //计算进位
}
}
for (int k=height-1;k>=0;k--)
{
cout<<result[k];
}
cout<<endl;
cout<<"length="<<height<<endl;
}