求助,只有55分,悬赏关注

P1530 [USACO2.4] 分数化小数 Fractions to Decimals

完了最后一行没删掉……
by yangyang1000 @ 2023-02-18 20:44:10


@[yangyang1000](/user/636442) 哈哈哈6
by Loser_Syx @ 2023-02-18 20:44:56


666
by dreamsong @ 2023-02-18 20:58:36


@[yangyang1000](/user/636442) 6,暴露了吧
by zenght @ 2023-02-18 21:03:34


大佬们帮忙挑个代码把,求求了
by yangyang1000 @ 2023-02-18 21:04:33


现在成功搞到89分,#8超时。。。 ```cpp #include<cstdio> #include<cstring> #include<iostream> #include<algorithm> using namespace std; int a, b, shang[1000005], yu[1000005]; string ans; void print() { for(int i=0;i<=ans.size();i++) { cout << ans[i]; if(i % 76 == 75) cout << "\\n"; } return ; } int main() { // freopen("P1350.out","w",stdout); scanf("%d %d", &a, &b); int num = a / b; //先输出整数部分和小数点 if(num == 0) ans += "0"; while(num > 0) { char c = num % 10 + '0'; ans = c + ans; num /= 10; } ans += "."; if(a % b == 0) { //若a被b整除,说明结果为整数,则输出x.0 ans += '0'; print(); return 0; } a = (a % b) * 10; //刨掉整数部分后,下一次竖式除法的余数=上一次的余数*10 for(int i = 1; i < 100005; i++) { //开始用竖式除法模拟计算小数部分 shang[i] = a / b; yu[i] = a % b; //将每次竖式除法算出的商和余数用数组存储 a = (a % b) * 10; //计算下一次竖式除法的被除数a if(yu[i] == 0) //如果第i次竖式除法余数为0,说明结果为有限小数 { for(int j = 1; j <= i; j++)//输出小数部分,结束程序 ans += (shang[j] + '0'); print(); return 0; } else //若没有余数为0的情况,说明结果为无限循环小数 { for(int j = i - 1; j >= 1; j--) { if(shang[i] == shang[j] && yu[i] == yu[j]) {//若第i次竖式除法和第j次竖式除法商和余数均相同,说明循环节为(j~i-1) for(int k = 1; k <= j - 1; k++) ans += (shang[k]+'0'); //输出小数点后循环节前面的部分 ans += "("; //输出循环节前的正括号 for(int k = j; k <= i - 1; k++) ans += (shang[k]+'0'); //输出循环节 ans += ")"; //输出循环节前的反括号 print(); return 0; } } } } return 0; } ```
by yangyang1000 @ 2023-02-18 21:09:35


|