zoukankan      html  css  js  c++  java
  • hdu1042--N!

    题目链接:

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

    想一下10000!一定非常大结果不能一次性输出,所以我们可以采用数组来保存结果;

    eg:100!=100*99*98*...*2*1;

    我们可以让9900*98...可以转换成大整数乘小整数;

    结果假如是:12 3456 7890;

    a[0]=7890;a[1]=3456;a[0]=12;

    具体过程如下:

     1 #include<iostream>
     2 #include<cstdio>
     3 #include<cmath>
     4 #include<algorithm>
     5 #include<queue>
     6 #include<cstdlib>
     7 #include<cstring>
     8 using namespace std;
     9 #define maxn 10010
    10 
    11 int a[maxn];//每个元素里存4位;不然10000的阶乘位数太多会超限; 
    12 
    13 void PUL(int a[],int k)
    14  {
    15     for(int i=0; i<maxn; i++)
    16     {
    17         a[i]=a[i]*k;
    18     }
    19     for(int i=0; i<maxn; i++) //进行进位,保证每个元素都含有4位
    20     {
    21         a[i+1]+=a[i]/10000;
    22 
    23         a[i]%=10000;
    24     }
    25 }
    26 
    27 void PUT(int a[]) 
    28 {
    29     int len;
    30 
    31     for(int i=maxn-1; i>=0; i--)
    32      {
    33         if(a[i]!=0) 
    34         {
    35             len=i;
    36             break;
    37         }
    38     }
    39     printf("%d",a[len]);//末位单独输出;eg:12 0000 0000; 
    40     for(int i=len-1; i>=0; i--)
    41     {
    42         printf("%04d",a[i]); 
    43     }
    44     cout<<endl;
    45 }
    46 int main()
    47  {
    48     int n;
    49 
    50     while(cin>>n) 
    51     {
    52         memset(a,0,sizeof(a));
    53 
    54         a[0]=1;//0!=1; 
    55 
    56         for(int i=1; i<=n; i++) 
    57         {
    58             PUL(a,i);
    59         }
    60         PUT(a);
    61     }
    62     return 0;
    63 }
  • 相关阅读:
    [Bootstrap]全局样式(四)
    [Bootstrap]全局样式(三)
    [Bootstrap]全局样式(二)
    [Bootstrap]全局样式(一)
    [Bootstrap]概述
    原生JS-----一个剪刀石头布游戏
    聊聊 ES6 中的箭头函数
    jQuery中的 AJAX
    AJAX封装
    AJAX 初识
  • 原文地址:https://www.cnblogs.com/zhengguiping--9876/p/4379195.html
Copyright © 2011-2022 走看看