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[ ...
随机推荐
- Quartz Scheduler(2.2.1) - Usage of JobDataMap
The JobDataMap can be used to hold any amount of (serializable) data objects which you wish to have ...
- Redis 命令 - Sorted Sets
ZADD key score member [score member ...] Add one or more members to a sorted set, or update its scor ...
- Android Support v4,v7,v13
Android Support v4 是最早(2011年4月份)实现的库.用在Android1.6 (API lever 4)或者更高版本之上.它包含了相对V4, V13大的多的功能. 例如:Frag ...
- CSS之Win8界面摸拟
开门见山,先把测试Result放上: <head> <meta charset="UTF-8"> <meta http-equiv="X-U ...
- Contoso 大学 - 6 – 更新关联数据
原文 Contoso 大学 - 6 – 更新关联数据 By Tom Dykstra, Tom Dykstra is a Senior Programming Writer on Microsoft's ...
- 编译android5.0源码的
java环境 Android 5.1 用到的jdk不再是Oracle 的 jdk ,而是开源的 openjdk,在ubuntu安装好后,使用如下命令安装jdk: $sudo apt-get insta ...
- Unity3D项目实战笔记(5):延时功能的几种实现
我所做过的系统,分单机版系统(2005年).CS系统(2010年).实时系统(2015年),各个系统均有“延时”功能:定时调度的: 本博客说的是实时系统中的延时功能(基于Unity3D游戏引擎). 在 ...
- iOS开发——返回特定的控制器
用导航控制器返回到上一页和返回到根控制器有其自带方法. 返回到特定的控制器的核心代码: popToViewController用法 方式一,不推荐[self.navigationController ...
- Linux 锁
问题: 1.假如对某个文件加了锁/lock,但是程序退出时没有关闭锁,如果想在另外一个程序中用这个文件,如何办? 2.
- 模板:Set类
头文件: #include <set> 定义: Set<string> set1; 添加: set1.insert("the"); 查询/获取元素 set1 ...