本節課作業:
連結:https://pan.baidu.com/s/13-FC86jSHGziRDA8lqzimg?pwd=owv1
提取碼:owv1
高精度乘法
#include<iostream> #include<cstdio> #include<cstring> using namespace std; string x , y; int a[50010] , b[50010] , c[50010]; int main() { cin >> x >> y; int l1=x.size() , l2 = y.size(); for(int i = 1 ; i <= l1 ; i++){ a[i] = x[l1-i]-'0'; } for(int i = 1 ; i <= l2 ; i++){ b[i] = y[l2-i]-'0'; } for(int i = 1 ; i <= l1 ; i++){ for(int j = 1 ; j <= l2 ; j++){ c[i+j-1] += a[i] * b[j]; } } int l = l1 + l2; for(int i = 1 ; i <= l - 1 ; ++i){ if(c[i] > 9){ c[i+1] += c[i] / 10; c[i] %= 10; } } while(c[l] == 0 && l > 1){ l--; } for(int i = l ; i >= 1 ; i--){ cout << c[i]; } return 0; }
#include<bits/stdc++.h> using namespace std; // 初始化兩個陣列,mul用於儲存每一步的乘積,add用於儲存乘積的各位數字之和的累積和 int mul[10010] = {1}, add[10010]; int main(){ int n, l = 2; // n是輸入的數字,l是當前mul陣列的長度(包括預留空間) cin >> n; // 讀取n的值 // 外層迴圈:從1乘到n for(int i = 1; i <= n; i++){ // 內層迴圈1:計算當前的乘積 for(int j = 0; j < l; j++){ mul[j] *= i; // 將當前索引的值乘以i } // 更新l的值,為可能的進位預留空間 // 注意:這裡簡單地將l增加2可能不是最優的,但在這個例子中足夠了 l += 2; // 內層迴圈2:處理進位 for(int j = 0; j < l; j++){ // 將當前位的進位加到下一位 mul[j + 1] += mul[j] / 10; // 更新當前位的值(去掉進位) mul[j] %= 10; } // 初始化add陣列的這一輪計算(理論上這一步不是必需的,因為add陣列會被累加) // 但為了清晰起見,可以在這裡明確設定add陣列的前l位為0(儘管它們可能已經是0了) // 內層迴圈3:計算當前乘積的各位數字之和,並累加到add陣列上 for(int j = 0; j < l; j++){ add[j] += mul[j]; // 將mul陣列的當前位加到add陣列的對應位上 // 處理add陣列的進位 add[j + 1] += add[j] / 10; add[j] %= 10; // 更新add陣列的當前位(去掉進位) } // 注意:這裡我們不需要重置mul陣列或l的值,因為它們是累積計算的 } // 找到add陣列中最後一個非零元素的索引 int idx = l - 1; // 從最後一個元素開始檢查 while(idx >= 0 && add[idx] == 0) idx--; // 輸出結果 // 從idx開始,逆序輸出add陣列中的元素 for(int i = idx; i >= 0; i--) cout << add[i]; cout << endl; // 可選:在輸出結束後新增換行符 return 0; }
高精度除法 高精度除低精度
#include <iostream> using namespace std; int a[10010], b, c[10010]; int main() { string s1; cin >> s1 >> b; int l1 = s1.size(); for (int i = 0; i < l1; i++) a[i] = s1[i] - '0'; long long r = 0; for (int i = 0; i < l1; i++) { r = a[i] + r * 10; c[i] = r / b; r %= b; } int len = 0; while(!c[len]){ len++; } for (int i = len; i < l1; i++){ cout << c[i]; } cout << endl << r; return 0; }