# 超過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]; } } ```