问一下C语言这道题怎么做?
#include<stdio.h>
int gcd(int a,int b) {//求最大公约数
/*
最小公倍数=(a,b的乘积)/最大公约数
*/
if(a%b==0)
return b;
else
return gcd(b,a%b);
}
int main() {
int a=5,b=13,c=6,d=3;
int sum=0;
int ans=0;
int x1,x2;
scanf("%d/%d %d/%d",&a,&b,&c,&d);
sum=(b*d)/gcd(b,d);//通分,求两个分母的最小公倍数(求和之后的分母)
x1=(sum/b)*a;//通分后,第一个分子
x2=(sum/d)*c;//通分后,第二个分子
ans=x1+x2;//分子之和
if(ans%sum==0){//分子可以整除以分母 (分母为1)
printf("%d/%d + %d/%d = %d/1",a,b,c,d,ans/sum);
}
else if(sum%ans==0){//分母可以整除以分子 (分子为1)
printf("%d/%d + %d/%d = 1/%d",a,b,c,d,sum/ans);
}
else{//分子,分母 都不为1 (分子,分母互不能整除)
int t=gcd(ans,sum);//求最大公约数,分子,分母约分
printf("%d/%d + %d/%d = %d/%d",a,b,c,d,ans/t,sum/t);
}
return 0;
}
题目规定的“样例”呢?
#include<stdio.h>
int gcd(int a,int b)
{ int r;
while(r=a%b){a=b; b=r;}
return b;
}
int main()
{ int a,b,c,d,fz,fm,gcd0;
scanf("%d/%d %d/%d",&a,&b,&c,&d);
printf("%d/%d+%d/%d=",a,b,c,d);
gcd0=gcd(b,d);
fm=b*d/gcd0;
fz=(a*d+b*c)/gcd0;
gcd0=gcd(fz,fm);
fz/=gcd0;
fm/=gcd0;
printf("%d",fz);
if(fm>1)printf("/%d",fm);
return 0;
}
#include <stdio.h>
int main()
{
//初始化两个分数的分子和分母
int numerator1, denominator1,numerator2,denominator2,x,y,c,gcd;
//提示用户输入分子1
printf("\nEnter the numerator for 1st number : ");
scanf("%d",&numerator1);
//提示用户输入分母1
printf("\nEnter the denominator for 1st number : ");
scanf("%d",&denominator1);
//提示用户输入分子2
printf("\nEnter the numerator for 2nd number : ");
scanf("%d",&numerator2);
//提示用户输入分母2
printf("\nEnter the denominator for 2nd number : ");
scanf("%d",&denominator2);
//通分后的分子
x=(numerator1*denominator2)+(denominator1*numerator2);
//通分后的分母
y=denominator1*denominator2;
// 简化求解结果,根据最大公约数
for(c=1; c <= x && c <= y; ++c)
{
if(x%c==0 && y%c==0)
gcd = c;
}
//显示计算结果分数
printf("\n求和后的分数结果是:%d/%d ",x/gcd,y/gcd);
printf("\n");
return 0;
}