1. 程式人生 > >p1696 數與連分數

p1696 數與連分數

之間 blog 兩個 很大的 can == gpo spa %d

背景
...

...:“這個簡單...我們還是去剛才的海邊唄...”
...:"其實今晚...我是有一定要完成的事情的..." .,
威尼斯真的是一個美麗的城市...很小的時候我就聽說這個地方..

這一天..從貝魯特歸來的商隊..除了布匹和香辛料...還帶來的東方的數字....
也有人曾經討論過它們的歷史...
只是很長時間這些都不被那些數學家們所重視..

人們懷著敬畏的心情..小心的審視著這些新奇的東西...
而它們..給生活在這片土地上的人們所帶來的..是很大的幫助..
...

描述
寫一個程序...可以實現在連分數和分數之間的互相轉換...

樣例1
樣例輸入1
[2;3,7]
51/22
樣例輸出1
51/22
[2;3,7]

思路
由於題中需要互相轉換,這裏我們需要定義兩個函數,分別模擬兩者之間的轉換。

代碼

 1 #include <stdio.h>
 2 #include <stdlib.h>
 3 #include <string.h>
 4 
 5 void go(int x,int y,int t);
 6 void come(int x,int y);
 7 int a[1000];
 8 
 9 int main(){
10     char x[1000];
11     while(scanf("%s",x)!=EOF){
12         memset(a, 0, sizeof
(a)); 13 if(x[0]==[){ 14 int t=1,q=1; 15 while(x[q]!=]){ 16 if(x[q]>=0&&x[q]<=9){ 17 a[t]=a[t]*10+x[q]-0; 18 } 19 else 20 t++; 21 q++; 22 }
23 go(a[t],1,t-1); 24 } 25 else{ 26 int t=1,q=0; 27 while(x[q]!=\n&&x[q]!=EOF&&x[q]!=\0){ 28 if(x[q]>=0&&x[q]<=9){ 29 a[t]=a[t]*10+x[q]-0; 30 } 31 else 32 t++; 33 q++; 34 } 35 int m=a[1],n=a[2]; 36 come(m,n); 37 } 38 } 39 return 0; 40 } 41 42 void go(int x,int y,int t){ 43 int i; 44 for(i=t;i>=1;i--){ 45 int c=x; 46 x=y; 47 y=c; 48 x=x+y*a[i]; 49 } 50 printf("%d",x); 51 if(y!=1) 52 printf("/%d",y); 53 printf("\n"); 54 return; 55 } 56 57 void come(int x,int y){ 58 int e=1,k; 59 k=x/y; 60 printf("[%d",k); 61 x=x-k*y; 62 while(x!=0){ 63 int c=x; 64 x=y; 65 y=c; 66 k=x/y; 67 x=x-k*y; 68 if(e==1) 69 printf(";%d",k),e=0; 70 else 71 printf(",%d",k); 72 } 73 printf("]\n"); 74 }

p1696 數與連分數