zoukankan      html  css  js  c++  java
  • NYOJ 28 (大数阶乘)

    我们都知道如何计算一个数的阶乘,可是,如果这个数很大呢,我们该如何去计算它并输出它?
    输入
    输入一个整数m(0<m<=5000)
    输出
    输出m的阶乘,并在输出结束之后输入一个换行符
    样例输入
    50
    样例输出

    30414093201713378043612608166064768844377641568960512000000000000

    因为阶乘的结果非常长,设置一个tail,来指向最高位。

    大数阶乘的模版

    //a[] 中倒序存放被乘数
    //b 为乘数
    //tail指向最高位
    
    //原理:用乘数去乘被乘数中的每一位(从低位到高位),再加上上一次运算的进位,将结果的最低位保留,进位储存参加下一次运算
    
    int tail=0;   //指向存放数据数组的最后一个位置
    int value;    //每一位的数值
    int carry=0;  //进位
    
    for(int j=0; j<=tail; j++)
    {
        value=a[j]*b+carry; //每一位的运算结果
        a[j]=value%10;       //将最低位保留在原位置
        carry=value/10;     //计算进位
    
        if(carry!=0&&j==tail)  //当j循环到最后一位时,仍然有进位
        {
            tail++;            //已存放数据的数组后面长度+1来存放最后一个进位数
        }
    }


    #include <iostream>
    
    using namespace std;
    
    int main()
    {
        int a[20000]={0};  
        int n;
        while(cin>>n)
        {
            int tail=0;   //指向存放数据数组的最后一个位置
            int value;    //每一位的数值
            int carry=0;  //进位
            
            a[0]=1;  //阶乘从1开始
            
            for(int i=2; i<=n; i++)  //1*2  1*2*3   1*2*...*n
            {
                for(int j=0; j<=tail; j++)
                {
                    value=a[j]*i+carry; //每一位的运算结果
                    a[j]=value%10;       //将最低位保留在原位置
                    carry=value/10;     //计算进位
                    
                    if(carry!=0&&j==tail)  //当j循环到最后一位时,仍然有进位
                    {
                        tail++;            //已存放数据的数组后面长度+1来存放最后一个进位数
                    }
                }
            }
    
    
            for(int i=tail; i>=0; i--)//输出
            {
                cout<<a[i];
            }
            cout<<endl;
        }
        return 0;
    }
    


  • 相关阅读:
    redis 设置分布式锁要避免死锁
    jmeter的简单http接口用法
    整理一些好的网站或者好的文章来慢慢学
    多线程的共享变量的内存不可见性如何理解
    谷歌浏览器可以google了
    org.apache.commons.dbcp.DelegatingPreparedStatement.isClosed()Z和NewProxyPreparedStatement.isClosed()
    php封装curl,模拟POST和GET请求HTTPS请求
    PHP 轻量级 REST框架
    使用 spring封装的javamail linux服务器发送邮件失败解决
    安装Ruby、Sass在WebStrom配置Scss编译环境css自动压缩
  • 原文地址:https://www.cnblogs.com/zhanyeye/p/9746124.html
Copyright © 2011-2022 走看看