pat 1081(patients)
1、题目链接
https://patest.cn/contests/pat-a-practise/1081
2、题意分析
(1)题意:计算一系列的分数值。
(2)分析:如何将计算过程最简化
1)类似数学中的分数相加,我们同分母来依次计算两者的值,直到数组结束。在每一次计算之后就将分母与分子约分,得到最简分数。
2)这里涉及到求最大公约数的方法,当然我们都知道使用欧几里得的辗转相除法。即可很快地得到最大公约数。
3、源代码
#include
#define size 102
//使用辗转相除法得到最大公约数
int getBigNumber(int a ,int b){
if(a % b == 0){
return b;
}
else if(b % a == 0){
return a;
}
int remain = a % b;
while(remain != 0){//如果余数不等于0
remain = a % b;
a = b;
b = remain;
}
return a; //返回最大公约数
}
int main(){
int number;
long array[size][2];//分别存储分子,分母
scanf("%d",&number);
int i;
for(i = 0;i同分母
if(array[i][1] % b == 0){
a = a * (array[i][1] / b) + array[i][0];
b = array[i][1] ;
}
else if( b % array[i][1] == 0 ){
a = a + array[i][0] * (b / array[i][1]);
}
else{
a *= array[i][1];
array[i][0] *=b;
a += array[i][0];
b *= array[i][1];
}
}
else{//如果两者相等
a += array[i][0];//a为两者相加,b不变
}
//化成最简分数
int n = getBigNumber(a,b);
a /= n;
b /= n;
}
int flag = 0;
if(a == 0){
printf("0\n");
return 0;
}
if(a > b){
printf("%d",a/b);
a %= b;
flag = 1;
}
if(a != 0){
//printf("%d/%d\n",a,b);
int n = getBigNumber(a,b);
//printf("n = %d\n",n);
//控制空格
if(flag){
printf(" %d/%d\n",a/n,b/n);
}
else{
printf("%d/%d\n",a/n,b/n);
}
}
}
/*
5
2/5 4/15 1/30 -2/60 8/3
4
1/3 -1/3 -1/3 1/3
3
1/3 -1/6 1/8
**/4、题目坑点
(1)注意当结果为0时的输出
(2)注意空格等的输出
(3)注意约分,化简过程
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。
暂时没有评论,来抢沙发吧~