#include #include #include #include <unordered_map> #include

using namespace std; int reduce(int num, int factor){ while(num % factor == 0){ num /= factor; } return num; }

string calculate(int a, int b){ string result; int integer_part = a / b; int remainder = a % b; result += to_string(integer_part) + ".";

int temp_b = b;
temp_b = reduce(temp_b, 2);
temp_b = reduce(temp_b, 5);

vector<char> decimal_digits;
unordered_map<int, int> rem_pos;
bool is_finite = true;
int cycle_start = -1;

if(temp_b == 1) {
	while(remainder != 0){
		remainder *= 10;
		decimal_digits.push_back('0' + remainder / b);
		remainder %= b;	
	}
}else{
	is_finite = false;
	int pos = 0;
	while(remainder !=0){
		if(rem_pos.count(remainder)){
			cycle_start = rem_pos[remainder];
			break;
		}
		rem_pos[remainder] = pos;
		remainder *= 10;
		decimal_digits.push_back('0' + remainder / b);
		remainder %= b;
		pos ++;
		
	}
}
if(is_finite){
	for(char c : decimal_digits){
		result += c;
	}
} else {
	for(int i =0; i < (int) decimal_digits.size(); i++){
		if(i == cycle_start){
			result += "(";
		}
		result += decimal_digits[i];
		if(i == (int) decimal_digits.size() -1){
			result += ")";
			break;
		}
	}
}
return result;

} int main(){ freopen("cycle.in", "r", stdin); freopen("cycle.out", "w", stdout); int T; cin >> T; vector<pair<int, int>> input_data; vector output_results; while(T--){ int a, b; cin >> a >> b; input_data.emplace_back(a, b); }

for(auto& p : input_data){
	int a = p.first;
	int b = p.second;
	string res = calculate(a, b);
	output_results.push_back(res);
}

for(string& res : output_results){
	cout << res << endl;	
}

return 0;

} 这段代码为什么在DevC++中编译和执行,测试都没问题,为什么到了这个系统中就始终过不去呢?

0 条评论

目前还没有评论...