zoukankan      html  css  js  c++  java
  • 蓝桥杯 基础练习——阶乘计算

    时间限制:1.0s   内存限制:512.0MB

    问题描述
      输入一个正整数n,输出n!的值。
      其中n!=1*2*3*…*n。

    算法描述
      n!可能很大,而计算机能表示的整数范围有限,需要使用高精度计算的方法。使用一个数组A来表示一个大整数a,A[0]表示a的个位,A[1]表示a的十位,依次类推。
      将a乘以一个整数k变为将数组A的每一个元素都乘以k,请注意处理相应的进位。
      首先将a设为1,然后乘2,乘3,当乘到n时,即得到了n!的值。

    输入格式
      输入包含一个正整数n,n<=1000。

    输出格式
      输出n!的准确值。

    样例输入
    10

    样例输出
    3628800

    解题报告
    乘法的大数计算
     1 #include <bits/stdc++.h>
     2 using namespace std;
     3 int a[100010]={1},alen=1;    ///答案
     4 int b[110];
     5 int t[100010],tlen;    ///临时存储 
     6 void multi(int blen) {
     7     for(int i=0;i<alen;i++) {
     8         for(int j=0;j<blen;j++) {
     9             t[i+j]+=(a[i]*b[j]);
    10         }
    11     }
    12     int c=0;    ///进位 
    13     alen=alen+blen+1;
    14     for(int i=0;i<alen;i++) {
    15         t[i]+=c;
    16         c=t[i]/10;
    17         a[i]=t[i]%10;
    18         t[i]=0;
    19     }
    20     while(!a[alen-1]) {
    21         alen--;
    22     }
    23 }
    24 int change(int integer) {
    25     int len=0;
    26     while(integer) {
    27         b[len]=integer%10;
    28         integer/=10;
    29         len++;
    30     }
    31     return len;
    32 }
    33 int main()
    34 {
    35     int n;
    36     cin>>n;
    37     for(int i=2;i<=n;i++) {
    38         multi(change(i));
    39     }
    40     for(int i=alen-1;~i;i--) {
    41         cout<<a[i];
    42     }
    43     cout<<endl;
    44     return 0;
    45 }
    View Code
  • 相关阅读:
    调试代码的技巧
    关联Lable和输入项
    如何更有效的利用自己的时间
    高效能人士的七个习惯>读书笔记之二
    .NET别名机制简介
    VS2005升SP1错误1718文件FileName被数字签名策略拒绝
    程序物语(三):做人、做事、生活
    程序物语(二):起手式
    SQL Server 2008如何压缩日志(log)文件?
    prototype中文参数乱码解决方案
  • 原文地址:https://www.cnblogs.com/wuliking/p/12670019.html
Copyright © 2011-2022 走看看