zoukankan      html  css  js  c++  java
  • 大数阶乘

    当求阶乘的数太大的时候,结果用int甚至long无法保存,可以用一个大数组来保存结果,运算的方法和笔算乘法类似。比如456 * 6的运算步骤如下:

    1. 数组num[0], num[1], num[2]分别存储456的个位、十位、百位
    2. 每一位与6相乘,相乘的结果+上一位的进位carry 的个位存储在该数组单元
    3. 计算要向上一位进位的carry
    #include <iostream>
    using namespace std;
    
    #define maxsize 4000
    
    int main(){
        int num[maxsize] = {0};
        int carry, t, n;// t用于记录当前结果的位数,carry为进位
        num[0] = 1;
        int ca;
        while(cin >> n){
            t = 0;
            num[0] = 1;
            for(int i = 1; i <= n; i++){// 计算阶乘,从1开始乘到n
                carry = 0;// 
                for(int j = 0; j <= t; j++){// 对于每个结果的每一位
                    ca = (num[j] * i + carry) / 10;// 计算出这一位乘以i的进位
                    num[j] = (num[j] * i + carry) % 10;要保存在这一位的结果
                    carry = ca;
                }
                while(carry != 0){// 每一个数如果carry!=0就说明要向上一位进位
                    num[++t] = carry % 10;
                    carry = carry / 10;
                }
            }
            for(int i = t; i >= 0; i--)// 输出结果
                cout << num[i];
            cout << endl;
        }
        return 0;
    }
    
  • 相关阅读:
    获取从链接传来的id
    通过域名直接访问Tomcat项目解决方法
    线程与高并发
    阿里云部署javaWeb项目全过程
    前后端分离项目,支持跨域,session不丢失
    python函数
    装饰器
    迭代器和生成器
    C/C++ I/O处理
    C++虚函数
  • 原文地址:https://www.cnblogs.com/zhuobo/p/10293665.html
Copyright © 2011-2022 走看看