网上看到这个问题,查了一下除了字符串查找没看到别的解法,自己写了一个,要考虑一些特殊情况,比如除0,负数等等,时间复杂度n^2,小数点长度N大于一万就慢了,感觉哪里还能再优化一下,最多跑过11111111/59595961,一共591万位,release要跑20秒5G内存,再大内存就不够了。

写的乱七八糟的,不写点注释以后估计自己都看不懂。

#include <iostream>
#include <vector>
using namespace std;
int main() {int upperLimit = 10;//小数点位数上限,当达到上限仍未找到循环节时乘以三继续寻找。int loopLen = 1;//循环节长度__int64 num;__int64 quotient;//商的整数部分__int64 a, b;vector<int> rem;//remainder小数部分cin >> a >> b;if (b == 0) {cout << "Integer division by zero。"; ::system("pause"); return 0;}if (a == 0) {cout << "0"; ::system("pause"); return 0;}if (float(a) / float(b) < 0) cout << "-";//负数判断a = abs(a);b = abs(b);quotient = a / b;a -= quotient * b;while (upperLimit *= 3,1) {auto HPC = [&]() {//高精度除法,除至第upperLimit位while (rem.size() < upperLimit) {a *= 10;num = a / b;rem.push_back(num);a -= b * num;}};auto Validate = [&]() {//结果有可能为0.(11...112)类似情况,至少验证多一倍的长度加上100位//以确保不会得出0.(1)这种答案,当然存在有一百多位的0.(11...112)循环,但估计分子分母是写不下了upperLimit *= 2 + 100;HPC();int front = rem.size() - 2 * loopLen;int back = rem.size() - loopLen;for (int i = upperLimit / 2; i < upperLimit; i++) {if (rem[i] != rem[front + (i - front) % loopLen]) return false;}return true;};auto SearchRepetation = [&]() {HPC();for (; loopLen <= rem.size() / 3; loopLen++) {auto HasRepeat = [&]() {for (int index = 1; index <= loopLen; index++)if (rem[rem.size() - index] != rem[rem.size() - loopLen - index] || rem[rem.size()-index-loopLen]!= rem[rem.size() - index - 2*loopLen]) return false;//查找时确保循环节出现至少三次,其实两次就够了,更多次数也不能保证特殊情况,//主要靠上面的验证步骤。上面的Validate多出来的一倍和100位也可以合并到这里面。return true;};if (HasRepeat() && Validate()) {//确定结果,输出int front = rem.size() - 2 * loopLen;int back = rem.size() - loopLen;while (front > 0 && rem[front-1] == rem[back-1]) { front--; back--; }if (back - front == 1 && rem[front] == 0) {//无循环if (front != 0)cout << quotient << ".";else//整数情况cout << quotient;for (int i = 0; i < front; i++) {cout << rem[i];}}else {//有循环cout << quotient << ".";for (int i = 0; i < back; i++) {if (i == front)cout << "(";cout << rem[i];}cout << ")";}return true;}}return false;};if (SearchRepetation()) break;}::system("pause");
}

分数化循环小数(纯/混)相关推荐

  1. 分数化成有限小数的方法_分数化小数的方法|小数化分数题目

    [www.520z-2.com - 话题作文] 小数由整数部分.小数部分和小数点组成.当测量物体时往往会得到的不是整数的数,古人就发明了小数来补充整数 小数是十进制分数的一种特殊表现形式.下面是小学生 ...

  2. usaco ★Fractions to Decimals 分数化小数

    ★Fractions to Decimals 分数化小数 写一个程序,输入一个形如 N/D 的分数(N 是分子,D 是分母),输出它的小数形式. 如果小数有循环节的话,把循环节放在一对圆括号中.例如, ...

  3. 把 分数化为循环小数 和 把循环小数化为分数 的方法

    今天学习了把分数化为循环小数,下面代码实现的功能是:输入m/n,如果m能被n整除,则直接输出商:否则,输出商以后再输出循环节. #include<cstdio> #include<c ...

  4. 1439: 2.4.5 Fractions to Decimals 分数化小数

    1439: 2.4.5 Fractions to Decimals 分数化小数 时间限制: 1 Sec  内存限制: 64 MB 提交: 194  解决: 13 题目描述 写一个程序,输入一个形如N/ ...

  5. 分数小数互换图_重复控制器学习心得(二)——超前环节的分数化和校正因子的引入...

    本文仅作为学习记录,欢迎各位提出宝贵建议 1.超前补偿环节的分数化 在上周我学习了分数阶RC的实现方式,无独有偶,超前补偿环节也可以应用插值的方式来近似分数阶补偿. 整数阶超前补偿的弊端主要有二: 一 ...

  6. 分数化小数(指定精度)

    分数化小数(指定精度) #include <stdio.h> #include <iostream> #include <iomanip> using namesp ...

  7. PHP实现页面静态化、纯静态化及伪静态化

    概念 php静态化分为:纯静态化 和 伪静态化: 纯静态化又分为:局部静态化 和 完全静态化 纯静态化:是把PHP生成的动态页面保存成静态的html文件,用户访问该静态页面,而不是用户每一次访问都重新 ...

  8. 20以内分数化小数表_初等数学33-百分数

    百分数定义 百分数与小数.分数的相互转换 百分数的定义 百分数是一个分母为100的比值,用百分号%表示.例如:用模型表示57%,即100个方格中有57个上色的格子 57/100 再如,25%,3%,1 ...

  9. C++——分数化小数

     File Name:T023.cpp 分数化小数 Time Limit: 3000ms, Memory Limit: 10000KB , Accepted: 3592, Total Submis ...

最新文章

  1. 创建新的apple id_Google是新的Apple吗?
  2. NLP机器翻译深度学习实战课程基础 | 深度应用
  3. STORM_0001_用vmware拷贝出三个相同的ubuntu搭建小的zookeeper集群
  4. 【原创】请不要对Boost Format使用Byte作为参数
  5. 诱导公式的本质【转载】
  6. Kali中搭建vulhub时镜像git失败
  7. CCF201509-3 模板生成系统(100分)
  8. CSS3渐变——gradient
  9. mysql索引红黑联盟_MySQL的索引
  10. 员工管理能力怎么提高?不妨使用现代工时表软件
  11. advStringGrid单元格文字垂直居中
  12. Bulma和 Tailwind功能比较
  13. 【C++】虚表与虚表指针,虚基类表与虚基类表指针
  14. Mysql-DQL基础查询
  15. matlab矩阵变成行向量,matlab中将一个矩阵按照行拼成一个行向量应该怎么输?
  16. 13、hive在启动beeline客户端时报错:User: xxx is not allowed to impersonate xxx
  17. 【数理统计】双因素方差分析
  18. 如何实现根据照片获取地理位置及如何防御照片泄漏地理位置
  19. java 抛出异常后,还会执行后面代码吗?
  20. 2022美容师(中级)考试题库及在线模拟考试

热门文章

  1. 信管1172-201711671226-WWY —JSP智能手机销售网后台设计
  2. 神经网络方法研究及应用,神经网络算法简单例子
  3. cv2.VideoCapture(0)无法打开usb摄像头问题
  4. 注册域名是什么意思?域名注册可以注册哪些域名?
  5. 轻松理解什么是渐进式web应用
  6. Android微信分享网络图片缩略图
  7. 苹果拒绝支持PWA,有损Web的未来
  8. 字符★字符型讲解★ASCII码(最全讲解,亿字干货)
  9. 砥砺的前行|基于labview的机器视觉图像处理|NI Vision Assisant(二)——界面介绍
  10. 图像边缘检测-Canny,Sobel等算子