分数求和
- C语言代码
- C++ 代码
- Java代码
- Python代码
💐The Begin💐点点关注,收藏不迷路💐 |
输入n个分数并对他们求和,并用最简形式表示。所谓最简形式是指:分子分母的最大公约数为1;若最终结果的分母为1,则直接用整数表示。
如:5/6、10/3均是最简形式,而3/6需要化简为1/2, 3/1需要化简为3。
分子和分母均不为0,也不为负数。
输入
第一行是一个整数n,表示分数个数,1 <= n <= 10;
接下来n行,每行一个分数,用"p/q"的形式表示,不含空格,p,q均不超过10。
输出
输出只有一行,即最终结果的最简形式。若为分数,用"p/q"的形式表示。
样例输入
2
1/2
1/3
样例输出
5/6
以下是使用C、C++、Java、Python实现输入多个分数并求和,输出最简形式的代码:
C语言代码
#include <stdio.h>
#include <stdlib.h>
// 求最大公约数的函数
int gcd(int a, int b) {
return b == 0? a : gcd(b, a % b);
}
int main() {int n;scanf("%d", &n); // 输入分数的个数nint sum_numerator = 0, sum_denominator = 1;for (int i = 0; i < n; i++) {int numerator, denominator;scanf("%d/%d", &numerator, &denominator); // 输入分子和分母sum_numerator = sum_numerator * denominator + numerator * sum_denominator;sum_denominator *= denominator; // 通分后进行分子相加,分母相乘}int common_divisor = gcd(sum_numerator, sum_denominator); // 求最大公约数sum_numerator /= common_divisor;sum_denominator /= common_divisor; // 化简if (sum_denominator == 1) {printf("%d", sum_numerator); // 分母为1,直接输出整数形式} else {printf("%d/%d", sum_numerator, sum_denominator); // 输出分数形式}return 0;
}
C++ 代码
#include <iostream
>
using namespace std;
// 求最大公约数函数
int gcd(int a, int b) {
return b == 0? a : gcd(b, a % b);
}
int main() {int n;cin >> n; // 输入分数个数nint sum_numerator = 0, sum_denominator = 1;for (int i = 0; i < n; i++) {int numerator, denominator;char slash; // 用于接收输入中表示分数的斜杠字符,虽然这里没实际用到它的值,但可以用来正确处理输入格式cin >> numerator >> slash >> denominator; // 先读分子,再读斜杠(会自动跳过),然后读分母sum_numerator = sum_numerator * denominator + numerator * sum_denominator;sum_denominator *= denominator; // 通分后计算分子和分母}int common_divisor = gcd(sum_numerator, sum_denominator); // 求最大公约数sum_numerator /= common_divisor;sum_denominator /= common_divisor; // 化简if (sum_denominator == 1) {cout << sum_numerator; // 分母为1输出整数形式} else {cout << sum_numerator << "/" << sum_denominator; // 输出分数形式}return 0;
}
Java代码
import java.util.Scanner;
public class Main {
// 求最大公约数的方法
static int gcd(int a, int b) {
return b == 0? a : gcd(b, a % b);
}
public static void main(String[] args) {Scanner scanner = new Scanner(System.in);int n = scanner.nextInt(); // 读取分数个数nint sum_numerator = 0, sum_denominator = 1;for (int i = 0; i < n; i++) {String fraction = scanner.next();int index = fraction.indexOf('/');int numerator = Integer.parseInt(fraction.substring(0, index));int denominator = Integer.parseInt(fraction.substring(index + 1));// 通分后计算分子和分母sum_numerator = sum_numerator * denominator + numerator * sum_denominator;sum_denominator *= denominator;}int common_divisor = gcd(sum_numerator, sum_denominator); // 求最大公约数sum_numerator /= common_divisor;sum_denominator /= common_divisor; // 化简if (sum_denominator == 1) {System.out.println(sum_numerator); // 分母为1输出整数形式} else {System.out.println(sum_numerator + "/" + sum_denominator); // 输出分数形式}
}
}
Python代码
from math import gcdn = int(input()) # 获取分数个数n
sum_numerator = 0
sum_denominator = 1
for _ in range(n):fraction = input().split('/') # 分割输入的分数为分子分母numerator = int(fraction[0])denominator = int(fraction[1])sum_numerator = sum_numerator * denominator + numerator * sum_denominatorsum_denominator *= denominator # 通分计算分子分母
common_divisor = gcd(sum_numerator, sum_denominator) # 求最大公约数
sum_numerator //= common_divisor
sum_denominator //= common_divisor # 化简
if sum_denominator == 1:print(sum_numerator) # 分母为1输出整数形式
else:print(f"{sum_numerator}/{sum_denominator}") # 输出分数形式
💐The End💐点点关注,收藏不迷路💐 |