完了最后一行没删掉……
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