HDU 2.1.8 小数化分数2
来源:互联网 发布:青华ug8.5编程视频教程 编辑:程序博客网 时间:2024/06/03 14:50
Problem Description
Ray 在数学课上听老师说,任何小数都能表示成分数的形式,他开始了化了起来,很快他就完成了,但他又想到一个问题,如何把一个循环小数化成分数呢?
请你写一个程序不但可以将普通小数化成最简分数,也可以把循环小数化成最简分数。
请你写一个程序不但可以将普通小数化成最简分数,也可以把循环小数化成最简分数。
Input
第一行是一个整数N,表示有多少组数据。
每组数据只有一个纯小数,也就是整数部分为0。小数的位数不超过9位,循环部分用()括起来。
每组数据只有一个纯小数,也就是整数部分为0。小数的位数不超过9位,循环部分用()括起来。
Output
对每一个对应的小数化成最简分数后输出,占一行。
Sample Input
30.(4)0.50.32(692307)
Sample Output
4/91/217/52
Source
2007省赛集训队练习赛(2)
Recommend
lcy
#include<stdio.h> #include"algorithm" using namespace std; unsigned long long gcd(unsigned long long a, unsigned long long b) { return b == 0 ? a : gcd(b,a%b); } int main() { //freopen("f://in.txt", "r", stdin); int testCase; char inNum[20]; scanf("%d", &testCase); getchar(); while (testCase--) { memset(inNum, 0, sizeof(inNum)); int len = 0, leftBracket = 0, rightBracket=0; scanf("%s", inNum); while (1) { if (inNum[len] == '\0')break; if (inNum[len] == '(')leftBracket = len; if (inNum[len] == ')')rightBracket = len; len++; } if (len == 0) break; unsigned long long numerator = 0, denominator,gcdND; if (leftBracket == 0)//纯小数 { for (int i = 0; i < len - 2; i++) numerator += unsigned long long(round((int(inNum[i + 2]) - '0')*pow(10, (len - 3 - i))+0.000001)); denominator = unsigned long long(round(pow(10, (len - 2)) + 0.000001)); } if (leftBracket == 2)//纯循环小数 { int bracketLen = rightBracket - leftBracket - 1; for (int i = 0; i < bracketLen; i++) numerator += unsigned long long(round((int(inNum[i + 3]) - '0')*pow(10, (bracketLen - 1 - i)) + 0.000001)); denominator = unsigned long long(round(pow(10, bracketLen) - 1 + 0.000001)); } if (leftBracket > 2)//部分循环小数 { int bracketLen = rightBracket - leftBracket - 1; int outLen = leftBracket - 2; for (int i = 0; i < outLen; i++) numerator += unsigned long long(round((int(inNum[i + 2]) - '0')*pow(10, (bracketLen + outLen - 1 - i)) + 0.000001)); for (int i = 0; i < bracketLen; i++) numerator += unsigned long long(round((int(inNum[i + 3 + outLen]) - 48)*pow(10, (bracketLen - 1 - i)) + 0.000001)); for (int i = 0; i < outLen; i++) numerator -= unsigned long long(round((int(inNum[i + 2]) - 48)*pow(10, (outLen - 1 - i)) + 0.000001)); denominator = unsigned long long(round(pow(10, (bracketLen + outLen)) - pow(10, outLen) + 0.000001)); } gcdND = gcd(denominator, numerator); printf("%lld/%lld\n", numerator / gcdND, denominator / gcdND); } return 0; }
0 0
- HDU 2.1.8 小数化分数2
- HDU 2.1.8 小数化分数2
- (hdu step 2.1.8)小数化分数2(小数化分数——包括了循环小数化分数的情况)
- HDU 小数化分数2
- hdu 1717 小数化分数2
- hdu 1717 --小数化分数2
- hdu 1717小数化分数2
- hdu 1717小数化分数2
- HDU 1717 - 小数化分数2
- HDU 1717 小数化分数2
- hdu 1717 小数化分数2
- hdu 1717 --小数化分数2
- HDU 1717 小数化分数2
- hdu 1717 小数化分数2
- hdu 1717 小数化分数2
- Hdu 1717 小数化分数2
- HDU 1717 小数化分数2
- HDU 1717 小数化分数2
- 城里人的高端玩法(对股票及金融创新的本质的经典讲解)
- HDU 2.1.7 Leftmost Digit
- windows 下配置python-opencv
- leetcode264.[DP][math][leep] Ugly Number II
- ios中cookies介绍及基本用法
- HDU 2.1.8 小数化分数2
- 第二周项目-小试循环
- HDU 2.2.1 Fibonacci
- LRU实现(基于双链表和HashTable实现)
- Eclipse上安装配置goclipse on windows
- 第2周项目4—用循环求(1)
- 固件空中升级(OTA)与固件二次引导的原理和设计
- PyQt5 - QWidgets部件进阶教程之日历窗口部件
- 股市和庞氏骗局的类同之处