---
# System prepended metadata

title: 超過2^32次方的階層運算

---

# 超過2^32次方的階層運算 
Author : 格致中學 盧昱安

    題目將範圍拉在1~15之間，如果階層數太高，會超過 int 和
    long long int 的範圍，這篇主要在講第六題開始的階層題目如何
    超過long long int(2^64)的大小限制
    
方法：大數運算
主要是透過vector儲存每一個位數，來防止單一值超過long long int。

    這個方法可以用於任何以後遇到可能超過2^64次方的運算，
    例如大數相加、減、乘、除

Code : 

```cpp=
#include <iostream>
#include <stdio.h>
#include <vector>
#include <math.h>
#include <algorithm>
#include <string.h>

using namespace std;

int main(){

    vector<int> bignumber;
    bignumber.push_back(1);

    int target;
    cout << "請輸入階層數(可超過15階層):" << endl;
    cin >> target;
    int i=1;
    int  j ,hold=0;
    while (i<=target) {
        for (j=0;j<bignumber.size();j++) {
            bignumber[j] *= i;
            bignumber[j] += hold;
            if (bignumber[j]>=10) {
                hold = bignumber[j] - (bignumber[j]) %10;
                bignumber[j] -= hold;
                hold /= 10;
            }
            else{
                hold = 0;
            }
        }
        if (hold!=0) {
            bignumber.push_back(hold);
            hold = 0;
        }
        i += 1;
    }
    reverse(bignumber.begin(),bignumber.end());
    cout << target << "!=";
    for(j=0;j<bignumber.size();j++){
        cout << bignumber[j];
    }

}
```