L1-009 N个数求和(入门20分 含易错点)

    技术2026-02-03  3

    L1-009 N个数求和

    本题的要求很简单,就是求N个数字的和。麻烦的是,这些数字是以有理数分子/分母的形式给出的,你输出的和也必须是有理数的形式。

    易错点

    浮点错误:除数或者取余为0运行超时:求最小公倍数用递归会超时 #include<iostream> using namespace std; long int ele1 = 0, dom1 = 0; //进行约分 void yuefen(long int& a, long int& b) { long int max = a > b ? a : b; long int min = a > b ? b : a; long int c = 1; //当分子为0时候 if (min == 0) a = 0; else { c = max % min; while (c != 0) { max = min; min = c; c = max % min; }// min a = a / min; b = b / min; } } //jieguo void jieguo(long int a, long int b) { if (a == 0) cout << 0; else if (a / b == 0 ) cout << a << "/" << b << endl; else if (a % b == 0) cout << a / b << endl; else cout << a / b << " " << a % b << "/" << b << endl; } void add(long int ele, long int dom, int i, int num) { //long int ele1 = 0, dom1 = 0; if (i == 0) ele1 = ele, dom1 = dom; else { long int mutiple = dom1* dom;//最小公倍数用递归会超时 long int mutiple_ele = (mutiple / dom1) * ele1 + (mutiple / dom) * ele; yuefen(mutiple_ele, mutiple);//yuefen finished ele1 = mutiple_ele; dom1 = mutiple; if (i == num - 1) jieguo(ele1, dom1); } } int main() { int num; cin >> num; char c; long int ele; long int dom; for (int i = 0; i < num; i++) { cin >> ele >> c >> dom; add(ele, dom, i, num); } return 0; }
    Processed: 0.028, SQL: 9