题目链接:
思路:
通过数组模拟d的每一位,逐位进行计算,从而实现对d的精确处理。
代码:
#include<bits/stdc++.h>
#define int long long
using namespace std;
const int N = 2020;int n;
string s;
vector<int> q;void gd(vector<int>& q, int num){int t = 0;for(int i = 0; i < (int)q.size(); i++){//计算每一位乘 numt += q[i] * num;//余数q[i] = t % 10;//进位t /= 10;}//进位if(t) q.push_back(t);
}void add(vector<int>& q, int k, int num){//t=num 表示后面一位要加上前面一位 / 10 的数(进位)int t = num;for(int i = k; i < (int)q.size(); i++){t += q[i];q[i] = t % 10;t /= 10;}if(t) q.push_back(t);
}signed main(){cin >> n >> s;//反转sreverse(s.begin(), s.end());//得到s反转后小数点的位置int c = s.find('.');//将反转的s存入q中for(auto x: s){if(x !='.'){//将x转换为int类型q.push_back(x - '0');}}//高精度 * 低精度while(n--) gd(q, 2);//四舍五入//反转后判断小数点前面位置//q中没有存'.',所以小数点位置就是进位的位置if(q[c-1] >= 5) add(q,c,1);//输出整数答案 逆序for(int i = (int)q.size()-1; i >= c; i--){cout << q[i];}return 0;
}