(算法)精确表示小数
2015-10-09 19:30
288 查看
题目:
给定一个正整数n,求1/n的小数表示,如:1/2=0.5
1/3=0.(3)
1/6=0.1(6)
1/7=0.(142857)
其中括号表示小数中的循环部分。
思路:
考虑一下除法运算的过程:当余数与之前运算出现重复时,那么说明循环已经开始,因此可以通过hash表来记录余数对应的位置。
被除数 除数 余数 商
1 7 1 0
1*10 7 3 1
3*10 7 2 4
2*10 7 6 2
6*10 7 4 8
4*10 7 5 5
5*10 7 1 7
1*10 7 3 1
3*10 7 2 4
2*10 7 6 2
6*10 7 4 8
4*10 7 5 5
5*10 7 1 7
代码:
#include<iostream> #include<map> #include<sstream> using namespace std; string decimalRepresent(int n){ map<int,int> mp; int num=10; int residue=1; string multi; int idx=0; while(mp.find(residue)==mp.end()){ if(residue==0){ stringstream ss; string tmp; ss<<1.0/n; ss>>tmp; return tmp; } mp[residue]=idx; stringstream sstr; string str; sstr<<num/n; sstr>>str; multi=multi+str; idx++; residue=num%n; num=residue*10; } string result="0."+multi.substr(0,mp[residue])+"("+multi.substr(mp[residue])+")"; return result; } int main(){ int n; while(cin>>n){ cout<<"The result of 1/"<<n<<": "<<endl; cout<<decimalRepresent(n)<<endl; } return 0; }
相关文章推荐
- 操作数寻址方式
- 尝试高亮语法
- PCB元件镜像的操作 Altium Designer
- ToolTip控件
- Apache POI 之 初学实战篇 (六) --- 读取Excel内容
- iOS 地图与定位
- python 的异常及其处理
- MVC 5 路由静态页面
- 163免费邮客户端设置的POP3、SMTP、IMAP地址
- 阅读
- Java基础知识强化之集合框架笔记51:Map集合之Map集合的功能概述与测试
- 【codeforces】Round #313 (Div. 2)
- Kruskal算法
- opencv2.4.10软件本身自带参考资料及手册
- hdu 5119__Happy Matt Friends
- 充电宝良莠不齐 购买使用需谨慎
- [茶聊] 我的第一个App(一)
- UE4高级功能-初探超大无缝map的实现LevelStream
- 分布式相关技术及其比较
- 实验一 认识DOS