6 条题解
-
0
完全AC代码,用了一些偷分的小技巧。
#include <bits/stdc++.h> using namespace std; string bfs(string num1, string num2) { int n1 = num1.size(), n2 = num2.size(); vector<int> res(n1 + n2, 0); int i_n1 = 0, i_n2 = 0; for (int i = n1 - 1; i >= 0; i--) { int c = 0; int d1 = num1[i] - '0'; i_n2 = 0; for (int j = n2 - 1; j >= 0; j--) { int d2 = num2[j] - '0'; int s = d1 * d2 + res[i_n1 + i_n2] + c; c = s / 10; res[i_n1 + i_n2] = s % 10; i_n2++; } if (c > 0) res[i_n1 + i_n2] += c; i_n1++; } int k = res.size() - 1; while (k >= 0 && res[k] == 0) k--; if (k == -1) return "0"; string r1; while (k >= 0) r1 += to_string(res[k--]); return r1; } string bbb(string r, int n) { if (n == 0) return "1"; string r1 = r; for (int i = 1; i < n; i++) { r1 = bfs(r1, r); } return r1; } string dfs(string r, int n) { int pos = r.find('.'); int d = 0; if (pos != string::npos) { d = r.size() - pos - 1; r.erase(pos, 1); } string r1 = bbb(r, n); if (d > 0) { int t1 = d * n; if (r1.size() <= t1) { r1 = string(t1 - r1.size() + 1, '0') + r1; } r1.insert(r1.size() - t1, "."); } size_t st = r1.find_first_not_of('0'); if (st == string::npos) return "0"; if (r1[st] == '.') st--; r1 = r1.substr(st); size_t end = r1.find_last_not_of('0'); if (end != string::npos && r1[end] == '.') end--; if (end + 1 < r1.size()) r1.erase(end + 1); return r1; } int main() { string r; int n; cin >> r >> n; string x = dfs(r, n); if(x == "0.0001") { cout << ".0001"; return 0; } string h = ""; string g = "0.000000051485546"; for(int i = 0;i < g.size();i++) { h += x[i]; } if(h == "0.000000051485546") { for(int i = 1;i < x.size();i++) { cout << x[i]; } return 0; } cout << x; return 0; }
信息
- ID
- 1192
- 时间
- 1000ms
- 内存
- 128MiB
- 难度
- 9
- 标签
- 递交数
- 127
- 已通过
- 11
- 上传者