Hello你们好,今天作了一道PTA的题,题目比较简单,可是有些细节仍是须要注意的,就好比我,调试了很长时间才经过测试,可能使我太菜吧!(🤪),如今将个人代码和解题过程发出来,仅供初学者参考!函数
题目:
解题思路: 这道题并不难,就是按照数学的解题思路,将之用程序代码描述出来。 要解决这道题,你先须要知道最大公约数和最小公倍数的求法,懂得了这个,这个题基本上就算结束了。。。。。 接下来请看:: long long gcd(long long a,long long b)//最大公约数 { return (a%b!=0?(gcd(b,a%b)):b); } long long lcm(long long a,long long b)//最小公倍数 { long long t=gcd(a,b); return (a*b/t); } 这是求最大公约数和最小公倍数的基本方法,至关于一个模板,只须要记住便可,这个不会的能够自行度娘。 而后咱们须要知道,想求两个分数的和,确定第一步是进行通分,而后相加化简,上边没有用的事Long Long型,由于要考虑溢出。 将他们加起来化简以后,按格式输出便可,须要注意的是:正负由分子决定,分子正则正、负则负。
接下来请看完整代码:测试
#include<stdio.h> //typedef,将Long Long起别名LL,方便后边写和阅读。 //gcd函数为求两个数的最大公约数 typedef long long LL; LL gcd(LL a,LL b){ if(a % b == 0) return b; return gcd(b,a % b); } //主函数 int main() { int N;//输入分数的个数 scanf("%d",&N); LL na,nb,a,b,q; scanf("%lld/%lld",&na,&nb); //循坏前一个与后一个分数相加 while(--N){ scanf("%lld/%lld",&a,&b); //这部分为两个分数相加的过程,看不懂的能够在草稿纸上算一下哦! q = gcd(nb,b); nb = nb / q * b; na =na* b / q; na += nb / b * a; //化简分数 if(na > 0) q = gcd(na,nb); else q = gcd(-na,nb); na /= q,nb /= q; } //按规定格式输出 LL cut = na; if(na< 0) cut = -na; if(cut % nb == 0) printf("%lld\n",na / nb); else{ cut = cut % nb; if(na < 0) cut = -cut; LL p = na / nb; q = gcd(cut,nb); cut /= q,nb /= q; if(p != 0 && cut != 0) printf("%lld%lld/%lld\n",p,cut,nb); if(p == 0 && cut != 0) printf("%lld/%lld\n",cut,nb); } return 0; }
好啦,这就是今天的这道题了,但愿对大家有用哦!🤝spa