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