易错点:分母为0的时候直接输出0就行了;break的位置要注意;i有外用要设置成全局变量。
疑点:Dev C++可以在循环的时候直接return i;但厦大oj需要中间变量ys;
描述
自从小明拜小强为师后,自知和师傅之间有着无法逾越的差距!不过他并不气馁,他决定通过的努力一点一点缩短与师傅之间的距离!这不才刚学完循环结构,他就迫不及待的想练习了。于是他自己去找了一些题来练手!
这第一个题很简单,就是给出一个分数,把它化为最简分式。
输入
第一行输入一个整数T,T \le 100T≤100,代表有T组测试数据。接下来的T行,每行输入两个非负整数n、m。n是分子,m是分母(也就是n/m)。每一行代表一组测试数据。0 \lt m,n \lt 1000000<m,n<100000
输出
输出最简分式,格式a/b。若b=1,只输出a;若分母n=0,则输出“Error!”(输出无引号)
每组测试数据占一行。
输入样例 1
3 12 16 15 3 20 0
输出样例 1
3/4 5 Error!
提示
注意:今后还会遇到有T组测试数据的问题,均可参照如下方式处理。
其实,T组数据不必一次性全部读进来,可以每次只读取两个数,一组一组处理。参考代码为:
scanf("%d", &T);
for(int t=0;t<T;t++)
{
scanf("%d%d", &n, &m);
//处理一组n,m
....
//输出本组结果
}
#include<stdio.h>
int main()
{
int t,n,m,ys;
int gys(int n,int m);
scanf("%d",&t);
for(int i=0; i<t; i++)
{
scanf("%d %d",&n,&m);
if(m==0) printf("Error!\n");
else if(n==0) printf("0\n");
else {
ys=gys(n,m);
m/=ys;
n/=ys;
if(m==1) printf("%d\n",n);
else printf("%d/%d\n",n,m);
}
}
return 0;
}
int gys(int n,int m)
{
int t,i,ys;
if(n>m) {
t=n;n=m;m=t;
}
for(i=n; i>0; i--)
{
if(m%i==0 && n%i==0){
ys=i;break;
}
}
return ys;
}