zzulioj 2022新生 第一次周赛题
题目描述
scz如今已经顺利进入高中啦!
他天资聪明,他的迷弟小明想考验他。
现在给出一个分数,要求把它转换为以下形式
其中的每一步转换都是一个整数 加一个 真分数。
scz听了以后说“太简单了!”就潇洒离开,留下小明一个人在风中凌乱,现在就请你帮助小明解决问题吧~
http://acm.zzuli.edu.cn/upload/image/20221021/20221021110005_22960.png
输入
输入两个整数 P 和 Q
0 <= P, Q <= 107
保证输入的分数合法且都可以写成有限长度的上述形式
输出
输出一行,格式见样例
样例输入 Copy
103 24
样例输出 Copy
103/24 = 4+1/{3+1/{2+1/3}}
提示
样例二:
输入 23 79
输出 23/79 = 0+1/{3+1/{2+1/{3+1/3}}}
样例三:
输入 6 3
输出 6/3 = 2
#include <stdio.h>
int maxcommon(int a,int b)//(最大公约数函数)记住一定要约分 !!
{
int t;
while(b!=0)
{
t=a%b;
a=b;
b=t;
}
return a;
}
int main()
{
int p,q,i,n,t,k,flag,a,b;
flag=0;
i=0;
scanf("%d %d",&p,&q);
printf("%d/%d = ",p,q);
//printf("%d\n",maxcommon(p,q));
if(p%q!=0)
{
a=p;
b=q;
p=p/maxcommon(a,b);//此处进行分数的约分工作
q=q/maxcommon(a,b);
while(flag!=1)
{
n=p/q;
flag=p%q;
printf("%d+1/",n);
if(flag!=1)
{
printf("{");
}
t=q;
q=p%q;
p=t;
i++;
}
//printf("%d",i);
printf("%d",p);
for(k=1;k<=i-1;k++)
{
printf("}");
}
}
else if(p%q==0)//若能整除则直接输出
{
printf("%d",p/q);
}
return 0;
}