本节课作业:
链接:https://pan.baidu.com/s/13-FC86jSHGziRDA8lqzimg?pwd=owv1
提取码:owv1
高精度乘法
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
#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; }View Code
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
#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; }View Code
高精度除法 高精度除低精度
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
#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; }View Code
标签:02,int,u7,c++,add,len,l1,include,s1 From: https://www.cnblogs.com/jayxuan/p/18287673