- 分数相关
- 知识点
- 前置知识:gcd
- 分数难搞,可以想办法去分母后计算
- 特判,分母为1的时候,只输出分子
- 例题
- P1572 计算分数 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)
- 自己第一次用的string直接整行读入,但是这样代码比较繁琐
- 本题的输入很有规律,可以采用scanf的格式化输入
- 本题标签【字符串,模拟】【gcd,分数】
- P1572 计算分数 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)
- 知识点
【P1572 计算分数 - 洛谷】AC代码:
#include<bits/stdc++.h>
using namespace std;
int gcd(int x, int y){
return y ? gcd(y,x%y) : x;
}
int lcm(int x, int y){
return x*y/gcd(x,y);
}
int main(){
int arr[100][2] = {0}, size = 0, temp = 0;
int sum = 0;
//分别收集每项的分子和分母
while (scanf("%d/%d", &arr[size][0], &arr[size][1]) != EOF){
size++;
}
int b = 1;
for(int i = 0; i<size; i++){
b = lcm(b,arr[i][1]);
}
int a = 0;
for(int i = 0; i<size; i++){
a += arr[i][0]*(b/arr[i][1]);
}
//约分
int c = gcd(a,b);//a是负数的时候,c会变成负数
if(c<0) c *= -1;
a /= c, b/= c;
//输出(b == 1 时,直接输出整数答案)
if(b==1) printf("%d",a);
else printf("%d/%d",a,b);
return 0;
}