csu 1303 Decimal (数论题)
http://acm.csu.edu.cn/OnlineJudge/problem.php?id=1303
1303: Decimal
Time Limit: 1 Sec Memory Limit: 128 MB Submit: 589 Solved: 61 [Submit][Status][Web Board]
Description
任意一个分数都是有理数,对于任意一个有限小数,我们都可以表示成一个无限循环小数的形式(在其末尾添加0),对于任意一个无限循环小数都可以转化成一个分数。现在你的任务就是将任意一个无限循环小数转化成既约分数形式。所谓既约分数表示,分子和分母的最大公约数是1。
Input
有多组数据。
每组数据一行。输入为0.a1a2a3...ak(b1b2...bm)的形式,其中a1a2a3...ak为非循环部分,(b1b2b3..bm)为循环部分。数据保证非循环部分的长度k和循环部分的长度m不会超过8.
Output
对于每组测试数据输出A/B,其中A是分子,B是分母,A,B均为整数。
Sample Input
0.0(714285)
0.0(5)
0.9(671)
Sample Output
1/14
1/18
4831/4995 【题解】: 分成两部分求解:
第一部分非循环部分,这部分很好求:(非循环部分)/ (非循环位数*10) 例如:0.3 == 3/10
第二部分为循环部分,(循环部分)/ (循环位数*10-1) 例如: 0.(3) == 3/(10-1) == 1/3
当然像 0.1(3)这种既有非循环又有循环的,就通过两部分想加就行
要注意的是:循环部分为 (循环部分)/ ((循环位数*10-1)* (非循环位数*10)) 【code】:
#include <iostream>
#include <stdio.h>
#include <string.h>
#include <algorithm> using namespace std; char str[]; long long gcd(long long u,long long v)
{
long long temp=u;
if(u>v) temp=u,u=v,v=temp;
while(temp)
{
temp = v%u;
v=u;
u=temp;
}
return v;
} int main()
{
long long arr[]={,,1e2,1e3,1e4,1e5,1e6,1e7,1e8,1e9,1e10,1e11,1e12};
while(~scanf("%s",str))
{
int i,f_cnt=,x_cnt=,flag = ;
long long s1=,s2=;
int len = strlen(str);
for(i=;i<len;i++)
{
char ch = str[i];
if(ch=='(') //取括号里面的循环部分
{
i++;
while(i<len&&isdigit(str[i]))
{
s2=*s2+str[i]-'';
x_cnt++; //循环位数计算
if(i+>=len||!isdigit(str[i+])) break;
i++;
}
flag=;
}
if(flag) //小数点后面的非循环部分
{
while(i<len&&isdigit(str[i]))
{
s1=*s1+str[i]-'';
f_cnt++; //非循环位数计算
if(i+>=len||!isdigit(str[i+])) break;
i++;
}
}
if(ch=='.')
{
flag = ; //标记小数点的出现
}
}
//非循环部分 s1 / arr[f_cnt]
//循环部分 s2 / (arr[x_cnt-1]-1) * (1 / arr[f_cnt])
if(x_cnt==) arr[x_cnt]=; //排除当x_cnt为0时 arr[cnt]-1出现除数为0的情况
long long up = s1*(arr[x_cnt]-)+s2;
long long down = (arr[x_cnt]-)*arr[f_cnt];
long long temp = gcd(up,down);
if(x_cnt==) arr[x_cnt]=; //记得改过来
printf("%lld/%lld\n",up/temp,down/temp);
}
return ;
}
csu 1303 Decimal (数论题)的更多相关文章
- BZOJ 3209: 花神的数论题 [数位DP]
3209: 花神的数论题 题意:求\(1到n\le 10^{15}\)二进制1的个数的乘积,取模1e7+7 二进制最多50位,我们统计每种1的个数的数的个数,快速幂再乘起来就行了 裸数位DP..\(f ...
- FJUT-这还是一道数论题
这还是一道数论题 TimeLimit:4000MS MemoryLimit:128MB 64-bit integer IO format:%lld Special Judge Problem D ...
- 【洛谷】4317:花神的数论题【数位DP】
P4317 花神的数论题 题目背景 众所周知,花神多年来凭借无边的神力狂虐各大 OJ.OI.CF.TC …… 当然也包括 CH 啦. 题目描述 话说花神这天又来讲课了.课后照例有超级难的神题啦…… 我 ...
- 【LG4317】花神的数论题
[LG4317]花神的数论题 题面 洛谷 题解 设\(f_{i,up,tmp,d}\)表示当前在第\(i\)位,是否卡上界,有\(tmp\)个一,目标是几个一的方案数 最后将所有\(d\)固定,套数位 ...
- BZOJ3209 花神的数论题 【组合数学+数位DP+快速幂】*
BZOJ3209 花神的数论题 Description 背景 众所周知,花神多年来凭借无边的神力狂虐各大 OJ.OI.CF.TC …… 当然也包括 CH 啦. 描述 话说花神这天又来讲课了.课后照例有 ...
- [BZOJ3209]花神的数论题 组合数+快速幂
3209: 花神的数论题 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 2498 Solved: 1129[Submit][Status][Disc ...
- 【BZOJ3209】花神的数论题 数位DP
[BZOJ3209]花神的数论题 Description 背景众所周知,花神多年来凭借无边的神力狂虐各大 OJ.OI.CF.TC …… 当然也包括 CH 啦.描述话说花神这天又来讲课了.课后照例有超级 ...
- 【bzoj3209】: 花神的数论题 数论-DP
[bzoj3209]: 花神的数论题 首先二进制数中1的个数最多就是64个 设所有<=n的数里二进制中1的个数为i的有a[i]个 那么答案就是 然后快速幂 求a[i]可以用DP 设在二进制中从 ...
- bzoj3209:3209: 花神的数论题
觉得还是数位dp的那种解题形式但是没有认真的想,一下子就看题解.其实还是设置状态转移.一定要多思考啊f[i][j]=f[i-1][j]+g[i-1][j] g[i][j]=f[i-1][j-1]+g[ ...
随机推荐
- poj 2553 强连通分支与缩点
思路:将所有强连通分支找出来,并进行缩点,然后找其中所有出度为0的连通分支,就是题目要求的. #include<iostream> #include<cstdio> #incl ...
- java性能
一.关于性能的基本知识 1.性能的定义 在我们讨论怎样提高Java的性能之前,我们需要明白“性能“的真正含义.我们一般定义如下五个方面作为评判性能的标准. 1) 运算的性能----哪一个算法的执 ...
- C# 为网络程序添加用户代理
如何为网络程序添加用户代理,本人推荐使用UrlMkSetSessionOption函数, 不过该函数有一个弱点不可以X64编译,X86编译软件才可以调用该函数 否则会一直返回!S_OK意义错误.第二呢 ...
- response小结(一)——用response向客户端输出中文数据(乱码问题分析)
Web服务器收到客户端的http请求,会针对每一次请求,分别创建一个用于代表请求的request对象,和代表响应的response对象.request和response对象既然代表请求和响应,那我们要 ...
- 和阿文一起学H5——音乐素材
国内 1.网易云音乐 http://music.163.com/ 网易云音乐有听歌识曲功能,听几秒中可听出是什么歌. 微信摇一摇也有听歌识曲功能. 2.只要伴奏不要人声 http://5sing.ku ...
- PDA库位商品出库适配算法
功能描述 代码实现 算法需求 回到顶部 功能描述 在PDA上面,通过扫描订单号,查询该商品的款号,尺码,订单数:同时适配仓库库位商品[SKU],显示该商品所在库位,库存数量,适配数. 因为PDA界 ...
- Git的安装以及一些操作
1.安装Git-2.5.1-64-bit.exe 一直下一步直至完成 2.注册github账号 官网地址:https://github.com/github 3.找到一个按钮“New Reposit ...
- 4月10日学习笔记——jQuery选择器
概念 jQuery 是一套Javascript脚本库,注意 jQuery 是脚本库,而不是脚本框架."库"不等于"框架".jQuery 并不能帮助我们解决脚本的 ...
- lex&yacc4
yacc: we cannt use the $$ value dirictly. we need get it irrotly;
- 按按钮调用PHP function函数
首先,请大家看一段HTML代码: <html> <head> </head> <body> <input type=button on_click ...