关于保留有效数字
查看原帖
关于保留有效数字
519605
Seven_tc楼主2023/11/16 16:02

虽然本题说了使用 cout 的默认精度,但是未雨绸缪还是思考了一下保留有效数字的写法, ①思路一,想办法获取整数部分的长度,然后用总长度减去整数部分长度会好一点

#include <iostream>
#include <iomanip>
#include <cmath>
using namespace std;

int main() {
	double m, h, bim;
	cin >> m >> h;
	bim = m / (h * h);
	if (bim > 24) {
		cout << fixed << setprecision(6 - int(log10(bim) + 1));
		cout << bim << endl;
		cout << "Overweight";
	}

	else if (bim >= 18.5)
		cout << "Normal";
	else
		cout << "Underweight";

	return 0;
}

②思路二,我们知道printf("%m.ns",s)里的n可以截取有效长度,所以想办法把bim转char数组就好了,因为小数点也算一位,但是小数点不算有效位数,所以n=7

#include <iostream>
#include <iomanip>

using namespace std;


int main() {
	double m, h, bim;

	cin >> m >> h;
	bim = m / (h * h);
	if (bim > 24) {
		char output[20];
		sprintf(output, "%lf", bim);
		printf("%.7s\n", output);
		cout << "Overweight";
	}

	else if (bim >= 18.5)
		cout << "Normal";
	else
		cout << "Underweight";


	return 0;
}

这种方法我测试后没有保留小数,所以会错两个测试点,但是要保留几位小数也跟整数部分长度有关,这么一想这种方法就暂时保留吧

2023/11/16 16:02
加载中...