虽然简单,但是这道题WA了无数次,以前写JAVA时就WA了,现在写C++,旧题重写又WA了。要注意的东西确实比较多,很值得记录一下。两种解法:
解法一:
#include<iostream>;
using namespace std;
int main() {
int a;
int b;
int c = 0;
cin >> a >> b;
double res = (double)a * b; //右边要进行转换
while (a%b != 0) {
c = a % b;
a = b;
b = c;
}
cout.precision(0);
cout << fixed << res / b << endl;//去除科学记数法
cin >> res;//TEST
}
/*
用double的注意事项
1.大数字从右边转换过来的时候第一个要加double
2.要去除科学记数法 fixed
3.要控制小数的位数对不对
*/
这道题在关于格式的方面有三个非常值得注意的地方:
1. 大数字从赋值号的右边的int类型复制到左边的double类型的时候,在右边要强制进行类型转换,因为如果两个int直接相乘有可能就已经在int中直接溢出了,赋值的数据都是错误的。
2. 接下来就是要注意把科学记数法用std::fixed给去掉,double在遇到大数值数据和很多的小数位时会使用科学记数法。
3. 要用cin.precision(0)控制小数的位数