PTA.7-33 有理数加法
本题要求编写程序,计算两个有理数的和。
输入格式:
输入在一行中按照a1/b1 a2/b2的格式给出两个分数形式的有理数,其中分子和分母全是整形范围内的正整数。
输出格式:
在一行中按照a/b的格式输出两个有理数的和。注意必须是该有理数的最简分数形式,若分母为1,则只输出分子。
输入样例1:
1/3 1/6
输出样例1:
1/2
输入样例2:
4/3 2/3
输出样例2:
2
答案:
#include<stdio.h>int main(){
int a1,a2,b1,b2,res1,res2,i,lit,mor;
scanf("%d/%d %d/%d",&a1,&b1,&a2,&b2
a1=a1*b2;
a2=a2*b1;
res1=a1+a2;
res2=b1*b2;
if(res1%res2==0)
printf("%d",res1/res2);
else{
if(res1<res2){
lit=res1;
mor=res2;
}else{
mor=res1;
lit=res2;
}
for(i=lit;i>=1;i--){
if(res1%i==0&&res2%i==0)
break;
}
res1=res1/i;
res2=res2/i;
printf("%d/%d",res1,res2);
}
return 0;
}
本来写这道题是按当初写一道类似有理数的加法的题目的思路去写的,想找到当时最后一个始终没有改出来的错误。这道题很简单,甚至枯燥。主要就是要解决最大公约数和最小公倍数的问题。但是我在编写过程中因为太急了,还是犯了一些编译错误,比如赋值反了的问题,唉,以后编程序还是得小心,不然一快自己就会编错,这道题我也没有用两个分子的最小公倍数,而是直接相乘,因为其实没有花那个必要用循环子再去找一个公倍数,不如直接用分母相乘,就可以使分子得到相应的相乘再得到和。最后用%d/%d使不会出现浮点问题。还有分母为一,其实就是可以直接整除。