【高精度】高精度分数[c++]
来源:互联网 发布:win10 平板 知乎 编辑:程序博客网 时间:2024/05/16 01:15
【高精度】高精度分数
时间限制: 1 Sec 内存限制: 64 MB
题目描述
“人无远虑,必有近忧”是修罗王一直以来恪守的信条,为了以防万一,他在很久以前就将《魔法宝典》的全部信息编码为一个巨大无比的自然数,并在这个数前加一个0和小数点,使它变成一个分数。然后他在戒指上刻了一个记号,使记号的两端长度比等于这个分数。这样,虽然他在入狱时手上只带了一个戒指,但只要测量出戒指上记号的比值M/N,他就可以还原《魔法宝典》的全部信息。
现在的问题是:已知分数M/N,试计算M/N的值。如果M/N是无限循环小数,则计算并输出它的第一循环节,同时要求输出循环节的起止位置(小数位的序号)。输入
只有一行,即M/N,其中0 < M < N < 100。输出
输出M/N的值,如为无限循环小数,则输出第一循环节及起止位置。样例输入
17/97样例输出
17/97=0.175257731958762886597938144329896907216494845360824742268041237113402061855670103092783505154639
from 1 to 96提示
【输入样例2】
1/2【输出样例2】
1/2=0.5
可以将商存放在一维数组中,进行除法运算,模拟人的手工操作,即每次求出商的一位后,将余数乘以10,再计算商的下一位。若某次余数为0,则为有限不循环小数。若某次计算后的余数与前面某个余数相同时,则M / N是无限循环小数。
代码[c++]
#include <iostream>#include <cstdio>#include <cstring>#include <cstdlib>using namespace std;const int maxn = 105;int main(){ int m,n; while(scanf("%d/%d",&m,&n)!=EOF) { int modnum[100] = {0};//记录每个余数出现的次数(余数的范围0~98) printf("%d/%d=0.",m,n); int div[maxn] = {0}; int k=-1; int judge=1; modnum[m]=1;//将被除数也算作余数 for(int i=1; i<105&&k==-1; i++) { m*=10; div[i]=m/n; m=m%n; if(modnum[m])//若某次计算后的余数与前面某个余数相同时,则M/N是无限循环小数 { k=i+1; judge=0; break; } modnum[m]=i+1; if(modnum[0])//若某次余数为0,则为有限不循环小数 { k=i+1; break; } } for(int i=1; i<k; i++) printf("%d",div[i]); printf("\n"); if(!judge)//输出循环节 printf("from %d to %d\n",modnum[m],k-1); } return 0;}
0 0
- 【高精度】高精度分数[c++]
- 高精度
- 高精度
- 高精度
- 高精度。。
- 高精度
- 高精度
- 高精度
- 高精度
- 高精度
- 高精度
- 高精度
- 高精度
- 高精度
- 高精度
- 高精度
- 高精度
- 高精度
- Windows文件对象
- iOS 将Log日志输出到文件中保存
- UIBezierPath绘制进度条
- iOS验证邮箱的有效性
- AutoCAD图纸统计工具
- 【高精度】高精度分数[c++]
- Junit
- Retrofit2.0使用总结
- 使用ES5 reduce()方法的一点小注意事项
- App Store被拒的一些原因
- Hadoop学习---第四篇Mapreducer里的Partitioner
- POJ2031 Building a Space Station(最小生成树,Prim)
- Hadoop-zookeeper
- 【codeforces 782B】The Meeting Place Cannot Be Changed(二分)