如果一个分数的分子小于分母,我们称之为 真分数,反之则为 假分数。
蒜头君只认识真分数和整数,请你将题目当中给出的分数进行处理:
输入格式
输入共一行,为两个空格隔开的整数a,b (1≤a,b≤200),表示该分数的分子和分母;
输出格式
输出共一行,为 11 个,22 个空格隔开的或33 个空格隔开的整数,对应处理完成的整数,真分数的分子、分母,或带分数的整数部分、分子、分母。
数据规模与约定
测试点编号 | a, b |
---|---|
1-2 | a < b |
3-5 | a >= b且 a %b = 0 |
6-10 | a >= b且 a % b != 0,需要约分 |
输出时每行末尾的多余空格,不影响答案正确性
样例输入1
2 5
样例输出1
2 5
样例解释1
真分数,不做处理直接输出,分子分母互质
样例输入2
120 100
样例输出2
1 1 5
样例解释2
需要转换为带分数,并约分。
1、定义头文件
#include <iostream>
#include <vector>
2、定义数据
vector<int> dd;
bool f;
3、得到200以内的质数
一会要判断是否要约分用了
void d() {
for (int i = 2; i <= 200; i++) {
f = true;
for (int j = 2; j * j <= i; j++) {
if (i % j == 0) {
f = false;
break;
}
}
if (f) {
dd.push_back(i);
}
}
}
4、数据输入
int main() {
d();
int len = dd.size();
int a, b;
int x = 0, y = 0, z = 0;
cin >> a >> b;
}
5、真分数数据处理
当为真分数的时候
if (a < b) {
for (int i = 0; i < len; i++) {
if (a % dd[i] == 0 && b % dd[i] == 0) { 用质数除
a = a / dd[i];
b = b / dd[i];
i--; 要是能的话再回去再除
}
}
cout << a << " " << b;
return 0;
}
6、可化简为整数的数据处理
当为可化简为整数的时候
if (a == b) {
cout << 1; 直接输出1
return 0;
}
if (a % b == 0) {
cout << a / b; 直接输出整数
return 0;
}
7、假分数数据处理
int cc = a / b; 算出前面的数字
cout << cc << " ";
a = a - cc * b; 化为真分数
for (int i = 0; i < len; i++) {
if (a % dd[i] == 0 && b % dd[i] == 0) { 用质数除
a = a / dd[i];
b = b / dd[i];
i--; 要是能的话再回去再除
}
}
cout << a << " " << b;
8、return 0
return 0;
完整代码
#include <iostream>
#include <vector>
using namespace std;
vector<int> dd;
bool f;
void d() {
for (int i = 2; i <= 200; i++) {
f = true;
for (int j = 2; j * j <= i; j++) {
if (i % j == 0) {
f = false;
break;
}
}
if (f) {
dd.push_back(i);
}
}
}
int main() {
d();
int len = dd.size();
int a, b;
int x = 0, y = 0, z = 0;
cin >> a >> b;
if (a < b) {
for (int i = 0; i < len; i++) {
if (a % dd[i] == 0 && b % dd[i] == 0) {
a = a / dd[i];
b = b / dd[i];
i--;
}
}
cout << a << " " << b;
return 0;
}
if (a == b) {
cout << 1;
return 0;
}
if (a % b == 0) {
cout << a / b;
return 0;
}
int cc = a / b;
cout << cc << " ";
a = a - cc * b;
for (int i = 0; i < len; i++) {
if (a % dd[i] == 0 && b % dd[i] == 0) {
a = a / dd[i];
b = b / dd[i];
i--;
}
}
cout << a << " " << b;
return 0;
}