hrbustoj 1125 循环小数 II(小数变分数+极限思想)
#include<stdio.h>
#include<string.h>
#include<algorithm>
#include<math.h>
#include<map>
#include<iostream>
using namespace std;
#define jw 10
///小小的总结了一下
///没有循环的方式略,当有循环的时候,就要用到0.999999... = 1的知识了
///0.99999.. = (9/10)+(9/100)+(9/1000)+(9/10000)+....+(9/10^n)
/// = (1/10 + 1/100 + 1/1000 ...)*9 左边由等比数列求和公式得到1/9 * (1 - 1/10^n);
/// n->+oo,左式为1/9,证明成立,代码中第二种方式原理与其一致
int gcd(int a,int b)
{
return b == ? a : gcd(b, a % b);
}
int main()
{
char a[];
while(~scanf("%s",a))
{
int len = strlen(a);
int pos1 = -,pos2 = -;
for(int i = ; i < len; i++)
{
if(a[i] == '(')
{
pos1 = i;
}
if(a[i] == ')')
{
pos2 = i;
}
}
if(pos1 == pos2)
{
int sum = ,num,tot = ;
for(int i = len-;a[i] != '.';i--)
{
num = a[i] - '';
sum += powl(,len--i) * num;
tot++;
}
tot = powl(,tot);
// cout<<"sum = "<<sum<<endl;
// cout<<"tot = "<<tot<<endl;
int gc1 = gcd(tot,sum);
cout<<sum/gc1<<"/"<<tot/gc1<<endl;
}
else
{
int sum1 = ,tot1 = ;
for(int i = ;a[i] != '(';i++)
{
sum1 *= jw;
sum1 += a[i] - '';
tot1++;
}
int sum2 = ,tot2 = ;
for(int i = pos1+;i < pos2;i++)
{
sum2 *= jw;
sum2 += a[i] - '';
tot2++;
}
tot1 = powl(,tot1);
tot2 = powl(,tot2) - ;
int num1 = sum1 * tot2 + sum2;
int num2 = tot1 * tot2;
int gc2 = gcd(num1,num2);
cout<<num1/gc2<<"/"<<num2/gc2<<endl;
}
}
}
hrbustoj 1125 循环小数 II(小数变分数+极限思想)的更多相关文章
- HDU1717小数化分数2
小数化分数2 Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Subm ...
- 【HDU】1717 小数化分数2 ——计数原理
小数化分数2 Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Subm ...
- HDU 1717 小数化分数2 数学题
解题报告:输入一个小于1的小数,让你把这个数转化成分数,但注意,输入的数据还有无限循环的小数,循环节用一对括号包含起来. 之前还没有写过小数转分数的题,当然如果没有循环小数的话,应该比较简单,但是这题 ...
- HDU 1717 小数化分数2(最大公约数)
小数化分数2 Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Subm ...
- CSU 8月月赛 Decimal 小数化分数
http://acm.csu.edu.cn/OnlineJudge/problem.php?id=1303 这个OJ很容易跪所以我贴一下题目 Description 任意一个分数都是有理数,对于任意一 ...
- 杭电oj1717——小数化分数(java实现)
question:小数化分数2 思路: /** * 这道题没有整数部分(有也无所谓,算小数部分,算完了分子分母按倍数加上就好),也就是说数组直接从a[2]开始后面是小数,我把这道题分为了三类: * * ...
- 无限小数转分数POJ1930分析
将无限小数化为分数,有一套简单的公式.使其轻松表示出来. 循环节 例如:0.121212…… 循循环节为12. 公式 这个公式必须将循环节的开头放在十分位.若不是可将原数乘10^x(x为正整数) ...
- 紫书 习题8-14 UVa 1616(二分+小数化分数+精度)
参考了https://www.cnblogs.com/dwtfukgv/p/5645446.html (1)直接二分答案.说实话我没有想到, 一开始以为是贪心, 以某种策略能得到最优解. 但是想了很久 ...
- ACM学习历程—HDU1717 小数化分数2(gcd)
Description Ray 在数学课上听老师说,任何小数都能表示成分数的形式,他开始了化了起来,很快他就完成了,但他又想到一个问题,如何把一个循环小数化成分数呢? 请你写一个程序不但可以将普通小数 ...
随机推荐
- VoIP的话音质量测量方法
严重的呼叫质量和性能管理问题会影响VoIP (Voice over IP)系统的运作.网络管理员等人需要理解基本的呼叫质量测量技术才能很好地监测.管理和诊断在VoIP中出现的这些问题.本文介绍了常用的 ...
- HDU 4857 逃生(反向拓扑排序+优先队列)
( ̄▽ ̄)" //这题对序号输出有要求,较小的序号优先输出,所以用到优先队列 //优先队列是优先弹出值最大的,所以最后要反向输出结果,才是正确的output #include<iost ...
- PHP之输出控制 ob_start(),ob_get_contents(),ob_end_clean()
1.常用函数 ob_start();#打开输出缓冲区 ob_get_contents();#获取缓冲区内容 ob_get_length();#获取缓冲区内容长度 ob_clean();#清除之前的所有 ...
- 硬盘安装win8系统方法汇总
从硬盘安装 (推荐)硬盘安装方法一 使用Nt6 hdd installer进行安装,此方法适合XP,vista, Windows 7等系统. 下载Nt6 hdd installer(Win8硬盘安装工 ...
- 作为Web开发人员,我为什么喜欢Google Chrome浏览器
来源: http://www.cnblogs.com/QLeelulu/archive/2011/08/28/2156402.html 在Google Chrome浏览器出来之前,我一直使用FireF ...
- VB webbrowser 控件的应用(跨域 内嵌网页元素的访问)
自动登录财付通,难点在于会出现验证码,并且验证码页是在iframe元素下的,出于各种安全考虑,webbrowser控件不提供这种访问机制!当然,第一想到的是将这个网页拿出来,可是输入完毕验证码后,点击 ...
- ANT 操控 ORACLE数据库实践
Ant 执行系统命令没有任何问题,这次实际系统命令中可以说遇到了两个问题,一个是启动服务的命令是含有空格的,第二个如何备份数据库可以自动加上日期. 首先,我们启动oracle数据库,操作有两个: 1. ...
- 解决centos无法上传文件和打开文件夹
使用yum搭建了ftp服务..yum的使用参考:http://blog.csdn.net/enson16855/article/details/9140623 windows使用FileZilla连接 ...
- java方法:flush()
flush本意是冲刷,这个方法大概取自它引申义冲马桶的意思,马桶有个池子,你往里面扔东西,会暂时保存在池子里,只有你放水冲下去,东西才会进入下水道. 同理很多流都有一个这样的池子,专业术语叫缓冲区,当 ...
- RING0,RING1,RING2,RING3
Intel的CPU将特权级别分为4个级别:RING0,RING1,RING2,RING3.Windows只使用其中的两个级别RING0和RING3,RING0只给操作系统用,RING3谁都能用.如果普 ...