1. 程式人生 > >HDU 1717 小數化分數2【數學】

HDU 1717 小數化分數2【數學】

小數化分數2

Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 4074 Accepted Submission(s): 1661
Problem Description Ray 在數學課上聽老師說,任何小數都能表示成分數的形式,他開始了化了起來,很快他就完成了,但他又想到一個問題,如何把一個迴圈小數化成分數呢?
請你寫一個程式不但可以將普通小數化成最簡分數,也可以把迴圈小數化成最簡分數。

Input 第一行是一個整數N,表示有多少組資料。
每組資料只有一個純小數,也就是整數部分為0。小數的位數不超過9位,迴圈部分用()括起來。

Output 對每一個對應的小數化成最簡分數後輸出,佔一行。
Sample Input 3 0.(4) 0.5 0.32(692307)
Sample Output 4/9 1/2 17/52

這個題又是一個奇怪的數學結論............

首先,每個有理數都是可以用分數表示的,然後對於迴圈小數,有如下表示性質:

(1)首先是:不迴圈部分,比如 0.21 表示為 21/100(這個是小學知識吧)

(2)然後是:迴圈部分,除去前導零後(額外乘上10的冪次方分之一不就得了),迴圈部分滿足下面的結論,如 0.(N)可以寫成N/10^(x+1)-1; 其中x 是N的位數(包含0), 比如 0.(1) 可以表示為 1/9,0.022 可以表示為 2/990.......(這個自己沒能力整出來....)自己找找規律的感覺吧...

(3)最後是:兩部分通分+化簡..........

#include<stdio.h>
#include<string.h>
int gcd(int a,int b)
{
	if(b==0)
	{
		return a;
	}
	return gcd(b,a%b);
}
int lcm(int a,int b)
{
	return a/gcd(a,b)*b;
}
void slove(char s[])
{
	int i=2,ax=0,ay=1;
	while(s[i]&&s[i]!='(')
	{
		ax=ax*10+s[i++]-'0';
		ay*=10;
	}
	if(s[i]!='(')
	{
		int tp=gcd(ax,ay);
		printf("%d/%d\n",ax/tp,ay/tp);
		return;
	}
	++i;
	int bx=0,by=0;
	while(s[i]&&s[i]!=')')
	{
		bx=bx*10+s[i++]-'0';
		by=by*10+9;
	}
	by*=ay;
	int y=lcm(ay,by);
	ax*=y/ay;bx*=y/by;
	int x=ax+bx,tp=gcd(x,y);
	printf("%d/%d\n",x/tp,y/tp);
}
int main()
{
	int t;
	//freopen("shuju.txt","r",stdin);
	scanf("%d",&t);
	while(t--)
	{
		char s[20]={0};
		scanf("%s",s);
		slove(s);
	}
	return 0;
}


相關推薦

HDU 1717 小數分數2數學

小數化分數2 Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Sub

HDU 1717 小數分數2數學基本知識)

Sample Output 4/9 1/2 17/52 【思路分析】   該題的關鍵點就是迴圈小數化為分數,有一個結論,假如這個迴圈小數是0.(1234),其化為分數即為1234/9999,也就是迴圈的部分除以這個迴圈部分長度個9,即1234除以4個(1234的長度)9。證明如下:   設這個迴圈小數x為0.

hdu 1717 小數分數2 (數學

小數化分數2 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 2022    Accepted Submis

HDU 1717 小數分數2

#include<stdio.h> #include<string.h> int f(int x) { int i, sum = 1; for(i = 1;

hdu 1717小數分數2

 眾所周知,有限小數是十進分數的另一種表現形式,因此,任何一個有限小數都可以直接寫成十分之幾、百分之幾、千分之幾……的數。那麼無限小數能否化成分數? 首先我們要明確,無限小數可按照小數部分是否迴圈分成兩類:無限迴圈小數和無限不迴圈小數。無限不迴圈小數不能化分數,這在中學將會得

hdu 1717 小數分數2 (迴圈小數轉分數

本題可推出公式 首先跟你一個小數 令X= 0 . s1 s2 ..sn ( y1 y2 y3..ym ) 這樣的話我們把小數點分為三個部分,分別用三種顏色標記了! 我們可以把表示式轉換成:X * 10 ^n=s1s2..sn+0.y1y2..ym;    我們用S

HDOJ 1717 小數分數2 (數學,迴圈小數分數詳細講解)

 小數化分數2 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total

1717 小數分數2

題目: Ray 在數學課上聽老師說,任何小數都能表示成分數的形式,他開始了化了起來,很快他就完成了,但他又想到一個問題,如何把一個迴圈小數化成分數呢?  請你寫一個程式不但可以將普通小數化成最簡分數,也可以把迴圈小數化成最簡分數。  Input第一行是一個整數N,表示

HDOJ 1717 小數分數2

連結:http://acm.hdu.edu.cn/showproblem.php?pid=1717 題目: 小數化分數2 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Jav

hdu 1717 小數分數

數學 題目分析:會補上的…… code: #include <iostream> #include <algorithm> #include <string> using namespace std; long long gcd(lo

小數分數2 杭電1717

4/9 1/2 17/52 這個題目其實很簡單,但是我還是花了很多時間在上面,真是比較慚愧,開始我用的是這個思想,但是程式碼提交老是wrong,我 也不知道是為什麼,如果有興趣可以看看。 http://hi.baidu.com/niren_cn/blog/item/d6b62516badadf47f91

hdu1717 小數分數2

題目連結: 小數化分數2 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 2921    Accepted

A. Little C Loves 3 I Codeforces Round #511 (Div. 2) 數學

pos == force line for 最大 header 應該 XML 題目: Little C loves number ?3? very much. He loves all things about it. Now he has a positive

C. Enlarge GCD Codeforces Round #511 (Div. 2)數學

ios ssis 進行 原理 als namespace 最大 cor http 題目: Mr. F has nn positive integers, a1,a2,…,an. He thinks the greatest common divisor of these

hdu1717 小數分數

std acc ef6 -a get nbsp c++ 只有一個 con 題目鏈接:http://acm.hdu.edu.cn/showproblem.php?pid=1717 小數化分數2 Time Limit: 1000/1000 MS (Java/Others)

hdu 6216 A Cubic number and A Cubic Number數學

eve event aps pro pan logs strong 是否 isp hdu 6216 A Cubic number and A Cubic Number 題意:判斷一個素數是否是兩個立方數之差,就是驗差分。 題解:只有相鄰兩立方數之差才可能,,因為x^3-

小數分數 模擬題

小數化分數 Problem Description 將給出的小數化為分數 Input 只有一行,為要轉換的小數(正負均有)。 注意:小數的格式有好幾種。為了方便起見,迴圈部分均被括號括起來了。 有前導0或後導0的例子:09.400(輸出47/5) 純迴圈小數的例子:0.(3)(輸

HDU 6154 CaoHaha's staff(數學規律題

【中文題意】給你一個面積,問你最少可以用多少條邊圍成一個圖形的面積大於或等於給出的面積。邊可以是1cm,也可以是sqrt(2)cm。 【思路分析】畫圖畫了N久,網路賽的時候和餅乾手推推到了20多,

規律貪心數學HDU 5573 Binary Tree

題目連結: 題目大意:   從1走到第k層,下一層的數是上一層的數*2或者*2+1,可以選擇加上或者減去走的數,最終要求結果為n   輸出每層走的數,和是加還是減 題目思路:   【規律】【貪心】【數學】   首先苦思冥想一下,發現,1 2 4 8...2k可以湊成任意的