求助,只有55分,悬赏关注
查看原帖
求助,只有55分,悬赏关注
636442
yangyang1000楼主2023/2/18 20:43
#include<string>
#include<map>
#include<iostream>
using namespace std;

void print(string ans)
{
	for(int i=0;i<=ans.size();i++)
	{
		cout << ans[i];
		if(i % 76 == 75) cout << "\\n";
	}
	return ;
}

int main() {
    int N, D;
    cin >> N >> D;

    string result;
    // 先把商部分放进结果
    result += to_string(N / D);
    // 获取余数
	int remain = N % D;
	result += '.'; // 存放余数出现的位置
	map<int, int> remain_pos; // 余数不为0,继续处理小数部分
    while (remain != 0) {
        // 如果新的余数已经出现过,说明小数有循环
		if (remain_pos.find(remain) != remain_pos.end()) {
            // 在循环节之前插入一对圆括号
			result.insert(remain_pos[remain], "(");
            result += ')'; // 输出并结束
            cout << result;
            return 0;
        }
        // 记录新出现的余数出现的位置
        remain_pos[remain] = result.size();
        // 余数乘以10,继续取商
		remain *= 10;
        result += to_string(remain / D);
        remain %= D;
    }
    // 如果没有循环,输出结果
	print(result);
    return 0;
}

//writlen by ChatGPT
2023/2/18 20:43
加载中...