求助模拟 70pts
查看原帖
求助模拟 70pts
555381
zlttcl楼主2023/3/2 22:31
#include <bits/stdc++.h>
using namespace std;
int len, l, r, k;
string t;
bool find_ans;
const char ch[3] = {'~', 'Y', 'W'};
inline void solve(int x, int y){
	int zero = x;
	for(int i = x; i <= y; ++ i){
		if(t[i] != '0'){
			zero = i, find_ans = 0;
			break;
		}
	}
	if(zero != x) putchar('0'), x = zero;
	int sum = 0;
	for(int i = x; i <= y; ++ i) sum = sum * 10 + (t[i] - 48);
	if(sum >= 1000){
		cout << sum / 1000 << 'Q', sum %= 1000;
		if(sum < 100) cout << 0;
	}
	if(sum >= 100){
		cout << sum / 100 << 'B', sum %= 100;
		if(sum < 10) cout << 0;
	}
	if(sum >= 10) cout << sum / 10 << 'S', sum %= 10;
	if(sum) cout << sum;
}
inline void change(int x, int y){
	bool p = 1;
	for(int i = x; i <= y; ++ i){
		if(t[i] != '0'){
			x = i, p = 0;
			break;
		}
	}
	if(p){
		putchar('0');
		return;
	}
	int now = (y - x) % 4 + 1;
	k = ((y - x + 1 < 9) ? (y - x + 1 < 5) + 1 : 0);
	for(int i = x; i < y;){
		find_ans = true;
		solve(i, i + now - 1);
		i += now, now = 4;
		if(!find_ans && (++ k) < 3) cout << ch[k];
	}
}
signed main(){
	cin >> t;
	len = r = t.size();
	l = (t[0] == '-' || t[0] == '+');
	if(t[0] == '-') putchar('F');
	for(int i = l; i < len; ++ i) if(t[i] == '.') r = i + 1;
	change(l, r - 2);
	if(r != len) cout << 'D';
	for(int i = r; i < len; ++ i) cout << t[i];
	return 0;
}
2023/3/2 22:31
加载中...