思路分析:题目本身不难,之所以分享出来是想加深C++数字运算细节理解和数字与字符串之间的转换的记忆。
#include<iostream>
#include<string>
using namespace std;
int gcd(int m,int n){
return n == 0 ? m:gcd(n,m%n);
}
int main(){
int n1,m1,n2,m2,k;
scanf("%d/%d %d/%d %d",&n1,&m1,&n2,&m2,&k);
if((double)n1/m1 > (double)n2/m2){//先判断两个数大小
swap(n1,n2);
swap(m1,m2);
}
double a = (double)m1/k;//第一个分数的公约数
int a1 = n1/a;
if((double)a1/k <= (double)n1/m1) a1++;
string res = "";
while((double)a1/k > (double)n1/m1 && (double)a1/k < (double)n2/m2){
if(gcd(a1,k) == 1){
res += to_string((long long)a1)+"/"+to_string((long long)k)+" ";
}
++a1;
}
res.erase(res.length()-1,1);cout<<res;
system("pause");
return 0;
}