- 问答
HTJ79B 过循环节(cycle)
- @ 2026-1-7 14:47:21
#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 条评论
目前还没有评论...