高精度还么完善 会在8月份完成
A*BBBB
题目链接:
https://ac.nowcoder.com/acm/contest/87255/D
题意+分析:
给你两个很大的正数a 和 b,b的位数都是相同的, 需要计算 a * b,可以知道单纯的a * b对c++同志是万万不可的,但是 它的长度非常的大在1e6,如果单纯的使用普通的高精度的大数 乘法方法也是不行,那么我们需要通过已有条件得出一下信息
Code:
#include<bits/stdc++.h> using namespace std; int main() { ios::sync_with_stdio(false); cin.tie(0); cout.tie(0); cout << fixed << setprecision(15); int t; cin >> t; while (t--) { string a, b; // 长度1e6 cin >> a >> b; string ans; reverse(a.begin(), a.end()); // 低位 -> 高位 int cur = 0, tmp = 0; for (int i = 0; i < a.size() + b.size(); i++) { if (i < a.size()) { // 累加a的每一位 cur += a[i] - '0'; } if (i >= b.size()) { //减去不再参与的位 cur -= a[i - b.size()] - '0'; } tmp += cur * (b[0] - '0'); // 计算当前位的结果,并处理进位 ans.push_back(tmp % 10 + '0'); // 取当前位的数字 tmp /= 10; // 更新进位 } while (ans.size() > 1 && ans.back() == '0') { // 前导零速速滚蛋 ans.pop_back(); } reverse(ans.begin(), ans.end()); // 高位 -> 地位 cout << ans << '\n'; } return 0; }
标签:tmp,完善,系列,cur,高精度,cout,ans,size From: https://www.cnblogs.com/youhualiuh/p/18322848