
打卡信奥刷题(1025)用C++实现信奥 P1530 [USACO2.4] 分数化小数 Fractions to Decimals
写一个程序,输入一个形如DN的分数,输出它的小数形式。如果小数有循环节的话,把循环节放在一对圆括号中。例如,310.33333333写成0.333341写成0.123,整数x写成x.0。
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 1≤N,D≤105)。
输出格式
输出按照上面规则计算出的小数表达式。如果结果长度大于 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%760) putchar(‘\n’);
}
return 0;
}
后续
接下来我会不断用C++来实现信奥比赛中的算法题、GESP考级编程题实现、白名单赛事考题实现,记录日常的编程生活、比赛心得,感兴趣的请关注,我后续将继续分享相关内容
更多推荐
所有评论(0)