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

题目描述

写一个程序,输入一个形如 N D \dfrac{N}{D} DN 的分数,输出它的小数形式。如果小数有循环节的话,把循环节放在一对圆括号中。

例如, 1 3 = 0.33333333 … \dfrac{1}{3}=0.33333333\ldots 31=0.33333333 写成 0. ( 3 ) 0.(3) 0.(3) 41 333 = 0.123123123 … \dfrac{41}{333}= 0.123123123\ldots 33341=0.123123123 写成 0. ( 123 ) 0.(123) 0.(123),整数 x x x 写成 x . 0 x.0 x.0

输入格式

输入包含两个整数 N N N D D D 1 ≤ N , D ≤ 1 0 5 1 \leq N,D \leq 10^5 1N,D105)。

输出格式

输出按照上面规则计算出的小数表达式。如果结果长度大于 76 76 76,每行输出 76 76 76 个字符。

输入输出样例 #1

输入 #1

45 56

输出 #1

0.803(571428)

说明/提示

翻译来自NOCOW

USACO 2.4

C++实现

#include
#include
#include
#include
using namespace std;
int n,d,k,w,sum,len;
string ans;
int pd[100005];
int main(){
scanf(“%d%d”,&n,&d);
k=n/d,w=-1;
do {
ans=char(k%10+‘0’)+ans;
k/=10;
}while(k>0);
ans+=‘.’;
n=n%d;
do {
if(pd[n]!=0) {
w=pd[n];
break;
}
else pd[n]=ans.size();
n*=10;
k=n/d;
ans+=char(k+‘0’);
n=n%d;
}while(n!=0);
if(w!=-1) ans+=‘)’;
len=ans.size();
for(int i=0;i<len;i++) {
if(iw) {
putchar(‘(’);
i–;
w=-1;
}
else putchar(ans[i]);
sum++;
if(sum%76
0) putchar(‘\n’);
}
return 0;
}

在这里插入图片描述

后续

接下来我会不断用C++来实现信奥比赛中的算法题、GESP考级编程题实现、白名单赛事考题实现,记录日常的编程生活、比赛心得,感兴趣的请关注,我后续将继续分享相关内容

Logo

集算法之大成!助力oier实现梦想!

更多推荐