C++里一个有点神奇的函数
__gcd(x,y);
int、long long类型都可以,需要注意的是两个类型必须要相同,还有不能用浮点型,当然手写gcd函数也是可以的,它头文件是algorithm。
看好了啊,这里是两个下划线!
// __gcd(a, b)
当然如果你够闲,也是可以手动实现它的。
话不多说,上代码!
-------------------调皮的分割线-------------------------------
#include<bits/stdc++.h>
#include <iostream>
#include <algorithm>
using namespace std;
int a,b;
int main()
{
cin >> a >> b;
cout << __gcd(a,b) << endl;
return 0;
}
-------------------调皮的分割线-------------------------------
本函数的实例运用情况:
PTA - 团体程序设计天梯赛 L1–009
L1–009 (没错点这里直接跳转)
-------------------调皮的分割线-------------------------------
思路:很简单,先创建一个结构体,然后分批读入数据,其中要注意"/"。
有比较坑的情况,有可能分母为零,这样会浮点错误。
还有就是分子为零,就直接输出0 不用再用分数的形式了。
建 议 自 己 写 一 遍 再 看 题 解.
C–style C++ 题解:
#include <bits/stdc++.h>
//经典万能头,A题专用
using namespace std;
struct node{
int x;
int y;
}pre[105];
int main()
{
int n;
int sum = 1, num, SUM = 0, p = 0;
cin >> n;
char c; //存斜杆 /
for (int i = 0; i < n; i ++)
{
cin >> pre[i].x >> c >> pre[i].y;
sum *= pre[i].y;
} //得出公共分母
for (int i = 0; i < n; i ++)
{
num = pre[i].x;
for (int j = 0; j < n; j ++)
{
if (i != j)
num *= pre[j].y;
}//分子
SUM += num;
}
if (SUM == 0)
cout << "0" << endl;
else if (SUM % sum == 0)
cout << SUM / sum << endl;
else {
if (SUM / sum >= 1)
{
p = SUM / sum;
SUM %= sum;
int temp = __gcd(SUM,sum);
cout << p << " " << SUM/temp << "/" << sum/temp << endl;
}
else
{
int temp = __gcd(SUM,sum); // __gcd(a, b) 看好了啊,这里是两个下划线!
cout << SUM/temp << "/" << sum/temp << endl;
}
}
return 0;
}
OK!