c++程序问题分数求和求以下问题不用数组的办法 急 输入n个分数并对他们求和,用约分之后的最简形式表示.比如:q/p = x1/y1 + x2/y2 +.+ xn/yn,q/p要求是归约之后的形式.如:5/6已经是最简形式,3/6需
来源:学生作业帮助网 编辑:作业帮 时间:2024/06/23 15:19:21
![c++程序问题分数求和求以下问题不用数组的办法 急 输入n个分数并对他们求和,用约分之后的最简形式表示.比如:q/p = x1/y1 + x2/y2 +.+ xn/yn,q/p要求是归约之后的形式.如:5/6已经是最简形式,3/6需](/uploads/image/z/13230550-46-0.jpg?t=c%2B%2B%E7%A8%8B%E5%BA%8F%E9%97%AE%E9%A2%98%E5%88%86%E6%95%B0%E6%B1%82%E5%92%8C%E6%B1%82%E4%BB%A5%E4%B8%8B%E9%97%AE%E9%A2%98%E4%B8%8D%E7%94%A8%E6%95%B0%E7%BB%84%E7%9A%84%E5%8A%9E%E6%B3%95+%E6%80%A5+%E8%BE%93%E5%85%A5n%E4%B8%AA%E5%88%86%E6%95%B0%E5%B9%B6%E5%AF%B9%E4%BB%96%E4%BB%AC%E6%B1%82%E5%92%8C%2C%E7%94%A8%E7%BA%A6%E5%88%86%E4%B9%8B%E5%90%8E%E7%9A%84%E6%9C%80%E7%AE%80%E5%BD%A2%E5%BC%8F%E8%A1%A8%E7%A4%BA.%E6%AF%94%E5%A6%82%EF%BC%9Aq%2Fp+%3D+x1%2Fy1+%2B+x2%2Fy2+%2B.%2B+xn%2Fyn%2Cq%2Fp%E8%A6%81%E6%B1%82%E6%98%AF%E5%BD%92%E7%BA%A6%E4%B9%8B%E5%90%8E%E7%9A%84%E5%BD%A2%E5%BC%8F.%E5%A6%82%EF%BC%9A5%2F6%E5%B7%B2%E7%BB%8F%E6%98%AF%E6%9C%80%E7%AE%80%E5%BD%A2%E5%BC%8F%2C3%2F6%E9%9C%80)
c++程序问题分数求和求以下问题不用数组的办法 急 输入n个分数并对他们求和,用约分之后的最简形式表示.比如:q/p = x1/y1 + x2/y2 +.+ xn/yn,q/p要求是归约之后的形式.如:5/6已经是最简形式,3/6需
c++程序问题分数求和
求以下问题不用数组的办法 急
输入n个分数并对他们求和,用约分之后的最简形式表示.
比如:q/p = x1/y1 + x2/y2 +.+ xn/yn,q/p要求是归约之后的形式.如:5/6已经是最简形式,3/6需要规约为1/2,3/1需要规约成3,10/3就是最简形式.PS:分子和分母都没有为0的情况,也没有出现负数的情况
关于输入 第一行的输入n,代表一共有几个分数需要求和 接下来的n行是分数
关于输出 输出只有一行,即归约后的结果
例子输入 2
1/2
1/3 例子输出 5/6
c++程序问题分数求和求以下问题不用数组的办法 急 输入n个分数并对他们求和,用约分之后的最简形式表示.比如:q/p = x1/y1 + x2/y2 +.+ xn/yn,q/p要求是归约之后的形式.如:5/6已经是最简形式,3/6需
#include<stdio.h>
unsigned gcd ( unsigned m,unsigned n );
void sum( unsigned *sum_x,unsigned *sum_y, unsigned x, unsigned y);
int main()
{
int n,i;
unsigned sum_x, sum_y,x,y;
scanf("%d",&n);
scanf("%u/%u",&sum_x, &sum_y);
for(i=1;i<n;++i) {
scanf("%u/%u",&x, &y);
sum(&sum_x, &sum_y, x, y);
}
if(sum_y != 1) {
printf("%u/%u\n", sum_x, sum_y);
} else {
printf("%u\n", sum_x);
}
return 0;
}
void sum( unsigned *sum_x,unsigned *sum_y, unsigned x, unsigned y) {
unsigned tmp;
*sum_x = *sum_x * y+ x*(*sum_y);
*sum_y = *sum_y * y;
tmp = gcd(*sum_x, *sum_y);
*sum_x /= tmp;
*sum_y /= tmp;
}
unsigned gcd ( unsigned m,unsigned n )
{
unsigned temp;
if (m<n)
{
temp=m;
m=n;
n=temp;
}
if ( m % n == 0)
{
return n;
}
else
{
return gcd ( n,m % n) ;
}
}