p1696 数与连分数
背景
...
...:“这个简单...我们还是去刚才的海边呗...”
...:"其实今晚...我是有一定要完成的事情的..." .,
威尼斯真的是一个美丽的城市...很小的时候我就听说这个地方..
这一天..从贝鲁特归来的商队..除了布匹和香辛料...还带来的东方的数字....
也有人曾经讨论过它们的历史...
只是很长时间这些都不被那些数学家们所重视..
人们怀着敬畏的心情..小心的审视着这些新奇的东西...
而它们..给生活在这片土地上的人们所带来的..是很大的帮助..
...
描述
写一个程序...可以实现在连分数和分数之间的互相转换...
样例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 }