ACM--Expanding Fractions
2015-07-12 20:22
218 查看
简略描述:求循环小数的循环节
Sample Input
Sample Output
Sample Input
3 7 345 800 112 990 53 122 0 0
Sample Output
.428571 The last 6 digits repeat forever. .43125 This expansion terminates. .113 The last 2 digits repeat forever. .4344262295081967213114754098360655737704918032786 885245901639 The last 60 digits repeat forever.
//基本思想就是每除一次,看新的余数是否与前面的相等 //如112/990 余数分别为112 130 310 130,可知130与前面的相等了 //故可知从此开始循环 // 此题的陷阱为,50个就空一行。然而,第一个行的"."号不算,也就是 //第一行输出49个,接下来每行50个。 #include<iostream> #include<string.h> using namespace std; int s[1001];//储存商 int y[1001];//储存余数 int main() { int a,b;//a分子,b分母 int i,j;//i余数的指针 int k; while(cin>>a>>b,a&&b) { i=2; j=1; memset(s,0,sizeof(s)); memset(y,0,sizeof(y)); int flag=0; y[1]=a; while(a) { int exit=0; a*=10; s[j]=a/b; a=a%b; y[i]=a; if(!a) { flag=1;break; } for(k=1;k<=i-1;k++) if(y[k]==y[i]) { exit=1; break; } if(exit) break; i++; j++; } cout<<"."; if(flag) { for(int m=1;m<=j;m++) cout<<s[m]; cout<<endl; cout<<"This expansion terminates."<<endl; } else { for(int m=1;m<=i-1;m++) { if(m==50||m > 51&&m%50==0)//被这条代码坑成狗啊!!! cout<<endl; cout<<s[m]; } cout<<endl; cout<<"The last "<<i-1-k+1<<" digits repeat forever."<<endl; } } return 0; }
相关文章推荐
- 【JAVA】【NIO】3、Java NIO Channel
- 单例设计模式
- Apache Spark入门攻略
- 线段树——HDOJ 1166 敌兵布阵 解题报告
- 牛腩新闻发布系统(4)——可变宽度的圆角框制作
- STL容器的适用情况
- Android中Application类用法
- 【我的学习笔记】汇总
- 文章标题
- 线程池的简单实现
- 在Android项目中(百度地图),报错:key验证出错,请在AndroidManifest.xml文件中检查key设置
- 不使用*、/、+、-、%操作符求一个数的1/3[算法]
- Single Number II
- options for pipe mode
- Spring的69个知识点
- 从view角度看dialog 和 toast
- Hive格式化输出数据库和表详细信息
- MySQL系列之D-2------MySQL多实例添加一个实例
- linux用户管理,运行级别
- 源码编译方式给LAMP环境加个XCache扩展