zoukankan      html  css  js  c++  java
  • HDU1042 N!(大数问题,万进制)

    题目链接:

    http://acm.hdu.edu.cn/showproblem.php?pid=1042

    N!

    Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 262144/262144 K (Java/Others)
    Total Submission(s): 89320    Accepted Submission(s): 26376


    Problem Description
    Given an integer N(0 ≤ N ≤ 10000), your task is to calculate N!
     
    Input
    One N in one line, process to the end of file.
     
    Output
    For each N, output N! in one line.
     
    Sample Input
    1 2 3
     
    Sample Output
    1 2 6
     
    分析:
    采用万进制
    万进制原理如下:
    比如:107924372*15=1618865580。
    四位一分,所以a[0]=4372,a[1]=790,a[2]=1;
    a[0]*15=4372*15+0(低位的进位)=65580,所以进位为65580/10000=6,余数为65580%10000=5580,a[0]=5580
    a[1]*15=792*15+6(低位的进位)=11886,所以进位为11886/10000=1,余数11886%10000=1886,[1]=1886
    a[2]*15=1*15+1(低位的进位)=16,所以进位为16/10000=0,余数16%10000=16,a[2]=16
    所以结果为a[2]a[1]a[0]=16 1886 5580
    如果a[1]=886的话,不满足四位,要在高位补0,那么这个时候的结果为:16 0886 5580
    只有最高位在不满足四位的情况不需要补0,其余都需要
    代码如下:
    #include<bits/stdc++.h>
    //采用万进制
    int main()
    {
        int n;
        while(~scanf("%d",&n))
        {
            int a[40000];
            int l=0;//位数
            a[0]=1;//初始化
            for(int i=1;i<=n; i++)//求阶乘
            {
                int c=0;
                for(int j=0; j<=l; j++)
                {
                    a[j]=a[j]*i+c;//该位的结果:该位数字乘以i,再加上低位的进位
                    c=a[j]/10000;//进位
                    a[j]=a[j]%10000;//余数
                }
                if(c>0)//最后还是有进位的情况
                {
                    l++;//位数加一
                    a[l]=c;//进位直接赋值
                }
            }
            printf("%d",a[l]);//先输出最高位
            for(int i=l-1; i>=0; i--)
                printf("%04d",a[i]);//除最高位以外,每位不足4位的时候前面补0
            printf("
    ");
        }
    }
  • 相关阅读:
    rsync
    typora 页内跳转
    shell脚本搭建redis集群
    Html
    python json模块
    Appium
    selenium+python
    jmeter+ant+jenkins接口自动化测试框架
    测试小结
    面向对向
  • 原文地址:https://www.cnblogs.com/yinbiao/p/8732611.html
Copyright © 2011-2022 走看看