pat 1088(patrol)

网友投稿 256 2022-09-20


pat 1088(patrol)

1、题目链接 2、题意分析 (1)题意:给出两个分数,求其加减乘除,写出其计算过程。要求:输出的数字符合规范 (2)分析:对于重复很多遍相同的要求,我们可以使用函数来解决这一类问题。 3、源代码 #include #define size 102 long int array[2][2];//分别存储分子,分母 //使用辗转相除法得到最大公约数 long int getBigNumber(long a ,long b){ long int remain = a; while(remain != 0){//如果余数不等于0 remain = a % b; a = b ; b = remain; } return a; //返回最大公约数 } void change(long int a,long int b ){ int flag2 = 0;//用来标志是否输出)号 //统一处理 if(a<0 && b<0){ a = (-1) * a; b = (-1) * b; } else if(a < 0 && b > 0){ printf("(-"); a = -1 * a; flag2 = 1; } else if(a > 0 && b < 0){ printf("(-"); b = -1 * b; flag2 = 1; } //求出第一个数的简写形式 int flag1 = 0; if(a >= b ){ printf("%ld",a / b);//输出整数部分 a %= b; flag1 = 1; } if(a!=0){ long temp = getBigNumber(a,b); a /= temp; b /= temp; } else{//a==0 if(!flag1){//如果一开始就比b小且为0 printf("0"); } } if(a != 0){ if(flag1){ printf(" %ld/%ld",a,b); } else{ printf("%ld/%ld",a,b); } } if(flag2){ printf(")"); } } int main(){ long int number; scanf("%ld/%ld %ld/%ld",&array[0][0],&array[0][1],&array[1][0],&array[1][1]);//输入分子分母 long int sumA = 0, sumB = 1; //和 long int difA = 0, difB = 1; //差 long int proA = 1, proB = 1; //积 long int quoA = 0, quoB = 1; //商 //求和 与 求差 if(array[0][1] != array[1][1]){ if(array[0][1] % array[1][1] == 0){ sumA = array[1][0] * (array[0][1] / array[1][1]) + array[0][0]; sumB = array[0][1] ; difA = array[0][0] - array[1][0] * (array[0][1] / array[1][1]) ; difB = array[0][1] ; } else if( array[1][1] % array[0][1] == 0 ){ sumA = array[0][0] * (array[1][1] / array[0][1]) + array[1][0]; sumB = array[1][1]; difA = array[0][0] * (array[1][1] / array[0][1]) - array[1][0]; difB = array[1][1]; } else{ sumA = array[0][0] * array[1][1] + array[1][0] * array[0][1]; sumB = array[0][1] * array[1][1]; difA = array[0][0] * array[1][1] - array[1][0] * array[0][1]; difB = array[0][1] * array[1][1]; } } else{//如果两者相等 sumA = array[0][0] + array[1][0] ; sumB = array[0][1]; difA = array[0][0] - array[1][0] ; difB = array[0][1]; } //求积 proA = array[0][0] * array[1][0] ; proB = array[0][1] * array[1][1]; //求商 int flagQro = 1; if(array[1][0]!=0){ quoA = array[0][0] * array[1][1] ; quoB = array[0][1] * array[1][0]; } else{ flagQro = 0; } //输出加减乘除 change (array[0][0],array[0][1]);printf(" + ");change (array[1][0],array[1][1]);printf(" = ");change(sumA,sumB);printf("\n"); change (array[0][0],array[0][1]);printf(" - ");change (array[1][0],array[1][1]);printf(" = ");change(difA,difB);printf("\n"); change (array[0][0],array[0][1]);printf(" * ");change (array[1][0],array[1][1]);printf(" = ");change(proA,proB);printf("\n"); if(flagQro) { change (array[0][0],array[0][1]);printf(" / ");change (array[1][0],array[1][1]);printf(" = ");change(quoA,quoB);printf("\n"); } else { change (array[0][0],array[0][1]);printf(" / ");change (array[1][0],array[1][1]);printf(" = ");printf("Inf\n"); } } /* 2/3 -4/2 1/2 2/4 1/3 -2/6 4/3 0/2 1/1 1/1 0/1 2/1 2/1 0/2 **/4、总结 (1)需要注意题目要求是:long int 型数据。


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:使用Springboot整合GridFS实现文件操作
下一篇:pat 1096(patekphilippe手表)
相关文章

 发表评论

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