首页 > ACM题库 > HDU-杭电 > HDU 1042 N!-模拟-[解题报告] C++
2013
11-26

HDU 1042 N!-模拟-[解题报告] C++

N!

问题描述 :

Given an integer N(0 ≤ N ≤ 10000), your task is to calculate N!

输入:

One N in one line, process to the end of file.

输出:

For each N, output N! in one line.

样例输入:

1
2
3

样例输出:

1
2
6

题目链接:Click here~~

#include <stdio.h>
#include <string.h>
#define base 10000 //1万代表每位存4位./*想想当N变大时,考虑中间数据是否会溢出int(即base*N) */
int num[10000];//此处位数根据N的阶乘位数/base的位数变化而变化
int main()
{
    int n;
    while(~scanf("%d",&n))
    {
        memset(num,0,sizeof(num));
        num[0]=1;
        int k=0;
        for(int i=2;i<=n;i++)
        {
            for(int j=k;j>=0;j--)
                num[j]*=i;
            for(int j=0;j<=k;j++)
            {
                if(num[j]>=base)
                {
                    num[j+1]+=num[j]/base;
                    num[j]=num[j]%base;
                }
            }
            k = num[k+1]==0?k:k+1;
        }
        for(int i=k;i>=0;i--)
            printf(i==k?"%d":"%04d",num[i]);//除了第一位,把前面的0都要补上。而且修改时别忘了把04改了.
        printf("\n");
    }
	return 0;
}


  1. 算法是程序的灵魂,算法分简单和复杂,如果不搞大数据类,程序员了解一下简单点的算法也是可以的,但是会算法的一定要会编程才行,程序员不一定要会算法,利于自己项目需要的可以简单了解。

  2. 我没看懂题目
    2
    5 6 -1 5 4 -7
    7 0 6 -1 1 -6 7 -5
    我觉得第一个应该是5 6 -1 5 4 输出是19 5 4
    第二个是7 0 6 -1 1 -6 7输出是14 7 7
    不知道题目例子是怎么得出来的

  3. A猴子认识的所有猴子和B猴子认识的所有猴子都能认识,这句话用《爱屋及乌》描述比较容易理解……