PAT乙级 有理数四则运算(20)

此题只要注意一下除法时候的负数情况就ok了,剩下的就完全模拟题意.此题中复习了一下辗转相除法,求最大公约数.

#include "iostream"
#include "string.h"
#include "string"
#include "cmath"
#include "stdio.h"
using namespace std;
 
int gcd(int a, int b)
{
    return b==0?a:gcd(b,a%b);
}
 
void PrintStr(const char* str)
{
    int a,b;
    bool flag = false;
    sscanf(str, "%d/%d", &a, &b);
    if(a == 0) {
        cout<< "0";
        return;
    }
    else if (a<0) {
        a = abs(a);
        flag = true;
        cout<<"(-";
    }
    int g = gcd(a, b);
    a = a/g;
    b = b/g;
    if(a % b == 0) {
        cout<b)
        cout<>str1>>str2;
    int a,b,c,d;
    sscanf(str1.c_str(), "%d/%d", &a, &b);
    sscanf(str2.c_str(), "%d/%d", &c, &d);
    char oStr[100] = {0};
    // 输出和
    sprintf(oStr,"%d/%d", b*c+a*d, b*d);
    PrintStr(str1.c_str());
    cout<<" + ";
    PrintStr(str2.c_str());
    cout<<" = ";
    PrintStr(oStr);
    cout<



你可能感兴趣的:(数据结构算法学习)