分数化小数

链接:https://ac.nowcoder.com/acm/problem/22935
来源:牛客网

写一个程序,输入一个形如N/D的分数(N是分子,是分母),输出它的小数形式。
如果小数有循环节的话,把循环节放在一对圆括号中。例如,
1/3 = .33333333写成0.(3)
41/333 = 0.123123123…写成0.(123)
用xxx.0成表示整数
典型的转化例子:
1/3 = 0.(3)
22/5 = 4.4
1/7 = 0.(142857)
2/2 = 1.0
3/8 = 0.375
45/56 = 0.803(571428)
输入
复制
45 56
输出
复制
0.803(571428)
代码
#include<bits/stdc++.h>
using namespace std;
在这里插入代码片int num[100005];
string st;
int main()
{
int x,d,n;
cin>>n>>d;
x=n/d;
n=n%d;
if(!n)
printf("%d.0\n",x);
else{
st+=:to_string(x)+’.’;//旧编译器通不过这个函数
memset(num,-1,sizeof(num));
string j;
while(n&&num[n]-1)
{
num[n]=j.size();
n*=10;
j+=n/d+‘0’;
n%=d;
}
if(!n)st+=j;
else st+=j.substr(0,num[n])+’(’+j.substr(num[n])+’)’;
}
for(int i=0;i<st.size();i++)
{
cout<<st[i];
if((i+1)%76
0) cout<<endl;
}
return 0;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值