博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
(算法)精确表示小数
阅读量:5051 次
发布时间:2019-06-12

本文共 1268 字,大约阅读时间需要 4 分钟。

题目:

给定一个正整数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
#include
#include
using namespace std;string decimalRepresent(int n){ map
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<
>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/"<
<<": "<

 

转载于:https://www.cnblogs.com/AndyJee/p/4864892.html

你可能感兴趣的文章
CentOS7中编写java编译执行脚本
查看>>
Docker简介(1)
查看>>
Linux 脚本
查看>>
HDUOJ---1213How Many Tables
查看>>
php 中self,this的区别和实地操作
查看>>
代码混淆遇到的问题
查看>>
Hibernate的条件查询的几种方式
查看>>
idea没有绑远程地址,如何提交到github的空项目
查看>>
PermGen space错误解决方法
查看>>
4. Retrieving a mapper(检索映射器)
查看>>
Office 2010 打开文件后所有的格式成了时间的解决方法
查看>>
2017-11-24 嵌入式笔记
查看>>
Win10 IoT C#开发 2 - 创建基于XAML的UI程序 及 应用的三种部署方法
查看>>
ADO.Net 之 数据库连接池(二)
查看>>
jdbc 处理Clob
查看>>
整理归纳 Oracle DBA 应该知道的一些东西
查看>>
空控制器的处理
查看>>
封装自己的yQuery
查看>>
GridView 行单击或双击事件绑定
查看>>
C#和vb.net代码相互转换
查看>>