ZZULIOJ 2947: scz的简单考验

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;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值