|
发表于 2023-7-30 16:28:34
|
显示全部楼层
那行,这道题没有解,你可以根据我这个代码来改一下:
- #include <bits/stdc++.h>
- using namespace std;
- int eps = 1000; // 小数的精度
- long long res[300001]; // 存储结果,已知 pi 是在 3~4 之间,所以第一位是整数位。
- int w = 0; // 要求的项数。
- void solve(long long i, int sign) { // 将 sign * (4 / i) 加入 res
- long long beichu = 4;
- for (int j = 0; j < eps; ++j) {
- if (sign == -1) {
- res[j] += beichu / i;
- } else {
- res[j] -= beichu / i;
- }
- beichu = beichu % i * 10;
- }
- }
- void jinwei() {
- for (int i = eps - 1; i >= 0; --i) {
- if (res[i] >= 10) {
- res[i - 1] += res[i] / 10;
- res[i] %= 10;
- }
- if (res[i] < 0) {
- res[i - 1] -= (long long)ceil((double)(-res[i]) / 10.0);
- res[i] += (long long)ceil((double)(-res[i]) / 10.0) * 10;
- }
- }
- }
- int main() {
- eps = 100;
- printf("项数?");
- scanf("%d", &w);
- // 先加入第一项和第二项(2.66666...)
- res[0] = 2;
- for (int i = 1; i < eps; ++i) res[i] = 6;
- long long tmp = 5;
- for (int i = 1; i < w; ++i) { // 从第三项开始加
- solve(tmp, (i % 2) ? -1 : 1);
- tmp += 2;
- }
- jinwei(); puts("");
- for (int i = 0; i < eps; ++i) {
- printf("%lld ", res[i]);
- }
- }
复制代码 |
|