1062

2017-09-05  本文已影响0人  峡迩
// PATn.cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h"
#include<iostream>
#include<string>
#include<vector>
#include<cmath>

using namespace std;

double get_value(string &s)
{
    if (s.find("/") != string::npos)
    {
        auto i = s.find("/");
        double s_n = stod(s.substr(0, i));
        double s_m = stod(s.substr(i + 1, string::npos));

        return (s_n / s_m);
    }
    else
        throw("Error");
}

bool check(int a, int b)
{
    bool flag = true;
    for (int i = 2; i <= a; ++i)
    {
        if ((a%i) == 0)
        {
            if ((b%i) == 0)
                flag = false;
        }
    }
    return flag;
}

int main()
{
    string s1, s2, s3;
    cin >> s1 >> s2 >> s3;

    double d1 = get_value(s1);
    double d2 = get_value(s2);

    if (d2 < d1)
    {
        double tmp = d1;
        d1 = d2;
        d2 = tmp;
    }

    double m = stod(s3);

    vector<double> n;
    double min = floor(d1*m)+1; //d*m,算出来的就是n的范围()!
    double max =ceil(d2*m); //double转int,小数部分直接被丢弃!若使用ceil,1.0转换为1.0!

    for (double n_tmp = min; n_tmp < max; ++n_tmp)
    {
        if (check(n_tmp, m) &&(n_tmp/m)!=d1 && (n_tmp/m)!=d2)
            n.push_back(n_tmp);
    }

    for (size_t i = 0; i < n.size(); ++i)
    {
        cout << n[i] << "/" << m;
        if (i != (n.size() - 1))
            cout << " ";
    }

    system("pause");
    return 0;
}

上一篇下一篇

猜你喜欢

热点阅读