zoukankan      html  css  js  c++  java
  • 高精度阶乘

     1 #include<iostream>      
     2 #include<cstring>      
     3 using namespace std;      
     4 int main()      
     5 {      
     6     int clong=1,ans=0,n,a[100000]={0};      
     7     a[1]=1;      
     8     cin>>n;      
     9     int i,j;      
    10     for(i=1;i<=n;i++)      
    11     {      
    12         for(j=1;j<=clong;j++)      
    13         a[j]=a[j]*i;      //每次求出阶乘的值
    14         for(j=1;j<=clong-1;j++)      
    15         {      
    16             a[j+1]+=a[j]/10; //大于10的放前面     
    17             a[j]%=10;      //留下一位
    18         }      
    19         while(a[clong]>=10)      
    20         {      
    21             clong++;      
    22             a[clong]=a[clong-1]/10; //大于10的放前面   
    23             a[clong-1]%=10;      //留下一位
    24 
    25         }      
    26     }      
    27     for(i=clong;i>=1;i--)    
    28     cout<<a[i];   
    29 } 

    为了弄懂这个代码,还是用代数的方法。。。求5!的值

    I=1

     a[1]=a[1]*i=1*1=1

    J=1.j<=0这个条件不满足,跳出循环

    A[1]>=10这个条件不满足,跳出循环。

    I=2

    A[1]=a[1]*i=1*2=2

    J=1.j<=0这个条件不满足,跳出循环

    A[1]>=10这个条件不满足跳出循环

    I=3

    A[1]=a[1]*i=2*3=6

    仍旧跳过两个循环

    I=4

    A[1]=a[1]*i=6*4=24

    J=1,j<=0这个条件不满足,跳出循环

    A[1]>=10.

    Clong=2.a[2]=a[1]/10=2.a[1]=a[1]%10=4

    A[2]=2>=10不满足条件,跳出循环

    I=5

    A[1]=a[1]*i=4*5=20

    A[2]=a[2]*i=2*5=10

    J=1.j<=1

    A[2]=a[2]+a[1]/10=10+20/10=12.a[1]%10=0

    A[2]=10>=10

    Clong=3.a[3]=a[2]/10=12/10=1.a[2]=a[2]%10=12%10=2

    A[3]=1>=10这个条件不满足,跳出循环

    跳出外层循环

    I=3输出a[3]=1

    I=2输出a[2]=2

    I=1输出a[1]=0

    得到结果5!=120

    这个算法就是把一个数拆成若干位存进数组a中,对于每次要乘的i,使每个数字都乘一遍i,然后在进行相除或区模运算更新值保证一个下标储存一个数字。

  • 相关阅读:
    职场之道
    AlphaBlend
    感动前行——给医学媳妇写的演讲稿(非IT类)
    高等数学积分公式大全
    分析Model2系统心得
    【软考】(六)关系代数
    飞鸽传书官方站点 创立黑马程序猿训练营
    实现简单的二级级联
    const和readonly差别
    Chord算法(原理)
  • 原文地址:https://www.cnblogs.com/peppa/p/8538376.html
Copyright © 2011-2022 走看看