pat 1081(patients)

网友投稿 241 2022-09-20


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小时内删除侵权内容。

上一篇:Java程序顺序结构中逻辑控制语句详解流程
下一篇:pat 1015(patreon)
相关文章

 发表评论

暂时没有评论,来抢沙发吧~