PTA | 程序設(shè)計(jì)類實(shí)驗(yàn)輔助教學(xué)平臺(tái)
我們先看一下這道題
我們的先創(chuàng)建變量來(lái)一個(gè)個(gè)接受數(shù)據(jù),然后我們分為三步:
1.將輸入的數(shù)據(jù)全部進(jìn)行通分
long long int sum_a = 0;
long long int sum_b = 1;
long long int a, b = 0;
scanf("%lld/%lld", &a, &b);
sum_a *= b;
sum_a += sum_b * a;
sum_b *= b;
我們將輸入的分?jǐn)?shù)的分子看成a,分母看成b
2.寫一個(gè)函數(shù)求出分子和分母的大公約數(shù),進(jìn)行化簡(jiǎn)。
求大公約數(shù),我們用輾轉(zhuǎn)相除法,可以用兩種方法實(shí)現(xiàn)
(1)非遞歸的方式:代碼如下
long long int gcd(long long int a, long long int b)
{
int t = 0;
while (t=a%b)
{
a = b;
b = t;
}
return b;
}
可以參考我往期的博客輾轉(zhuǎn)相除法求兩個(gè)數(shù)的大公約數(shù)_GO1ING的博客-博客
(2)用遞歸的方法:這樣可以節(jié)省代碼量,但是思路是一樣
long long int gcd(long long int a, long long int b)
{
return b ? gcd(b, a % b) : a;
}
3.按要求進(jìn)行輸出。
在最后我們要注意題目的輸出要求,也是本題的易錯(cuò)點(diǎn)。
if (sum_a % sum_b == 0)
{
printf("%lld", sum_a / sum_b);
}
else if (sum_a< sum_b)
{
printf("%lld/%lld", sum_a, sum_b);
}
else
printf("%lld %lld/%lld", sum_a / sum_b, sum_a%sum_b, sum_b);
return 0;
最后我們是完整代碼:
long long int gcd(long long int a, long long int b)
{
return b ? gcd(b, a % b) : a;
}
int main()
{
long long int t = 0;
long long int sum_a = 0;
long long int sum_b = 1;
long long int n = 0;
scanf("%d", &n);
for (int i = 0; i< n; i++)
{
long long int a, b = 0;
scanf("%lld/%lld", &a, &b);
sum_a *= b;
sum_a += sum_b * a;
sum_b *= b;
t = gcd(sum_a, sum_b);
sum_a /= t;
sum_b /= t;
}
if (sum_a % sum_b == 0)
{
printf("%lld", sum_a / sum_b);
}
else if (sum_a< sum_b)
{
printf("%lld/%lld", sum_a, sum_b);
}
else
printf("%lld %lld/%lld", sum_a / sum_b, sum_a%sum_b, sum_b);
return 0;
}
你是否還在尋找穩(wěn)定的海外服務(wù)器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機(jī)房具備T級(jí)流量清洗系統(tǒng)配攻擊溯源,準(zhǔn)確流量調(diào)度確保服務(wù)器高可用性,企業(yè)級(jí)服務(wù)器適合批量采購(gòu),新人活動(dòng)首月15元起,快前往官網(wǎng)查看詳情吧