p1696 數與連分數
阿新 • • 發佈:2018-03-02
之間 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 數與連分數