兩個特別大的數之間相乘怎麼計算?
阿新 • • 發佈:2019-02-14
兩個數特別大,相乘起來超過了long int型的範圍?怎麼計算?
比如:要計算123456789987654321 * 987654321123456的值,怎麼寫程式?
結果:/* large_num_operation.cpp */ #include <iostream> #include <cstring> using namespace std; void calc_result(string first, string second); int main() { // 0. 定義並輸入兩個字串 string first; cout<<"Input number1:"<<endl; cin>>first; string second; cout<<"Input number2:"<<endl; cin>>second; calc_result(first, second); return 0; } void calc_result(string first, string second) { // 1. 記錄兩個字串長度 int flen = first.size(); int slen = second.size(); int result[flen+slen]; // 定義陣列儲存每一位運算結果 // 2. 初始化陣列 memset(result, 0, sizeof(result)); // 3. 相乘 for(int i=0; i<flen; i++) { for(int j=0; j<slen; j++) { result[i+j+1] += (first.at(i)-'0')*(second.at(j)-'0'); } } // 4. 進位 for(int i=flen+slen-1; i>=0; i--) { if(result[i] >= 10) { result[i-1] += result[i]/10; result[i] = result[i]%10; } } // 5. 輸出 cout<<endl<<"The result: "<<endl; int i=0; while(result[i]==0){i++;}; // 若以0開頭,去掉0 for(; i<flen+slen; i++) { cout<<result[i]; if ( i != (flen+slen-1) && (flen+slen-1-i)%3 == 0 ) cout<<","; } cout<<endl; }