本题的要求很简单,就是求N个数字的和。麻烦的是,这些数字是以有理数“分子/分母”的形式给出的,你输出的和也必须是有理数的形式。
输入格式:
输入第一行给出一个正整数N(<=100)。随后一行按格式“a1/b1 a2/b2 ...”给出N个有理数。题目保证所有分子和分母都在长整型范围内。另外,负数的符号一定出现在分子前面。
输出格式:
输出上述数字和的最简形式 —— 即将结果写成“整数部分 分数部分”,其中分数部分写成“分子/分母”,要求分子小于分母,且它们没有公因子。如果结果的整数部分为0,则只输出分数部分。
输入样例1:5 2/5 4/15 1/30 -2/60 8/3输出样例1:
3 1/3输入样例2:
2 4/3 2/3输出样例2:
2输入样例3:
3 1/3 -1/6 1/8输出样例3:
7/24#include "stdafx.h" int main() { int fenzi[100],fenmu[100],i,j,n,fenmu_all=1,fenzi_all=0,sum; scanf_s("%d", &n); /*输入代输入个数*/ for ( i = 0; i < n; i++) { scanf_s("%d/%d", &fenzi[i],&fenmu[i]); /*输入分子/分母*/ fenmu_all *= fenmu[i]; /*求出总的分母--所有分母的乘积*/ } for ( i = 0; i < n; i++) { for ( j = 0; j < n; j++) { if (j!=i) { fenzi[i] = fenzi[i] * fenmu[j]; /*相对于总分母求出第i个分子--第i个分子*除第i个分母外的所有分母*/ } } fenzi_all += fenzi[i]; /*求所有的分子的和为总分子*/ } sum = fenzi_all / fenmu_all; /*总分子/总分母的整数部分*/ fenzi_all = fenzi_all - sum * fenmu_all; /*求得去除整数部分的总分子*/ for ( i = fenzi_all; i > 0; i--) { if (fenzi_all%i==0&&fenmu_all%i==0) /*另总分子总分母同除以化简*/ { fenzi_all = fenzi_all / i; fenmu_all = fenmu_all / i; } } printf(sum==0?"":"%d ", sum); /*当sum==0输出""当sun!=0输出"%d "*/ printf(fenzi_all==0?"":"%d/%d", fenzi_all, fenmu_all); return 0; }