• 高精度阶乘


     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,然后在进行相除或区模运算更新值保证一个下标储存一个数字。

  • 相关阅读:
    爬虫笔记1
    python逐行读取文件&作成xml文件
    C#.NET自定义下拉框实现选中下拉list的值和显示框内的值不同
    Mongodb笔记
    tomcat启动脚本
    mysql相关函数
    关于SQL_Errno1677导致主从复制中断处理
    mysql慢查询日志切换
    mysql5.7 忘记root密码处理
    Python零基础入门(4)-------简单了解Python是怎么运行
  • 原文地址:https://www.cnblogs.com/peppa/p/8538376.html
Copyright © 2020-2023  润新知