zoukankan      html  css  js  c++  java
  • 进击吧!阶乘——大数乘法

    题目链接:https://www.nowcoder.net/acm/contest/75/E

     

    题目描述:给定一个整数N0≤N≤10000),求取N的阶乘


     

    输入描述:多个测试数据,每个测试数据输入一个数N


    输出描述:每组用一行输出N的阶乘


     输入

    1

    2

    3

      

    输出

    1

    2

    6

     

    思路:刚看到时我以为是打表,但是看到N的最大值后就放弃了这种想法。然后就想到了大数乘法,由于以前只写过大数加,所以比赛时一时没有思路,就选择了放弃,比赛结束补题时才把它A了,接下来是我的代码,希望对各位有所帮助~

     

     1 #include <bits/stdc++.h>
     2 using namespace std;
     3 
     4 int n;
     5 int a[35000],b[35000],num[100];  //为了试数组大小试了很久,最后把范围缩小到了3e5左右
     6 
     7 int main(){
     8     while(~scanf("%d",&n)){
     9         memset(a,0,sizeof(a));
    10         memset(b,0,sizeof(b));
    11         a[0]=1;
    12         int flag=1;  //用来记录a数组的长度
    13         for(int i=1;i<=n-1;i++){
    14             int m=i;
    15             for(int j=0;j<flag;j++){
    16                 b[j]=a[j];
    17             }
    18             int t=0;
    19             while(m){
    20                 num[t++]=m%10;  //将m的每个数用数组存起来
    21                 m/=10;
    22             }
    23             int j,k;
    24             for(j=0;j<flag;j++){  //用乘法竖式即可理解
    25                                   //实在不能理解,请看我找到的这篇大神的博客(http://blog.csdn.net/lisp1995/article/details/52316466
    26                 for(k=0;k<t;k++){
    27                     a[j+k]=a[j+k]+num[k]*b[j];
    28                 }
    29             }
    30             flag=j+k;
    31             for(j=0;j<flag;j++){  //进位处理
    32                 if(a[j]>=10){
    33                     a[j+1]=a[j+1]+a[j]/10;
    34                     a[j]=a[j]%10;
    35                 }
    36             }
    37         }
    38         int i;
    39         for(i=flag;i>=0;i--){  //去除前导零
    40             if(a[i]!=0) break;
    41         }
    42         for(;i>=0;i--){
    43             printf("%d",a[i]);
    44         }
    45         printf("
    ");
    46     }
    47 }


     


    版权声明:本文允许转载,转载时请注明原博客链接,谢谢~
  • 相关阅读:
    JS 面向对象
    堆 栈
    考试题
    HTML Meta标签
    Nodejs 安装
    CSS3 背景图片的大小位置
    JS Math函数
    CSS3 巧用before after选择器
    计算机网络原理_数据链路层
    Asp.net_验证控件
  • 原文地址:https://www.cnblogs.com/Dillonh/p/8490004.html
Copyright © 2011-2022 走看看