记录一下脑残瞬间

一只大象口渴了,要喝 20 升水才能解渴,但现在只有一个深 ℎ厘米,底面半径为 r 厘米的小圆桶 (ℎ和 r 都是整数)。问大象至少要喝多少桶水才会解渴。

Update:数据更新,这里我们近似地取圆周率 π=3.14。

输入格式

输入有一行:包行两个整数,以一个空格分开,分别表示小圆桶的深 h 和底面半径 r,单位都是厘米。

输出格式

输出一行,包含一个整数,表示大象至少要喝水的桶数。

样例:

输入为23 11...输出为3

起初代码

//错解
#include<cstdio>
using namespace std;
int main() {
	int h, r;
	scanf("%d %d", &h, &r);//涉及到整数与小数混合运算
	printf("%d", ((20000 / (3.14 * r * r * h)) + 1));//double类型赋值给int类型,小数部分会被截断
	return 0;
}//输出为7311749

之前也错过,先相关的,添加计算式到变量中,运行成功了,当时也没想明白.(以为计算式添加到变量中有什么神奇之处)

	//正解
	#include<cstdio>
	using namespace std;
	int main() {
		int h, r;
		int g;
		scanf("%d %d", &h, &r);//涉及到整数与小数混合运算
		g = (20000 / (3.14 * r * r * h)) + 1;//int除以double结果必为double类型.然后强转为g(int)类型
		printf("%d",g);//double类型赋值给int类型,小数部分会被截断
		return 0;
	}

然后继续又想了想,不对劲,应该大概不会出现那种神奇的事,是不是我计算式出现问题了?(或许是整数与小数除法错了),主要是之前错过相关的,没想通,ε=(´ο`*)))唉.然后我想,只要把它变成整数,图一我就是正确的了吧,然后想到了向下整函数,结果一试,还是不对.

//错解
#include<cstdio>
#include<cmath>
	using namespace std;
	int main() {
		int h, r;
		scanf("%d %d", &h, &r);//涉及到整数与小数混合运算
		printf("%d", std::floor((20000 / (3.14 * r * r * h)) + 1));//std::floor() 返回的结果类型与其参数类型相同,即如果参数是浮点数类型,返回值也将是浮点数类型。
		return 0;//所以上面使用std::floor,前必须在前面强制转换(int)
	}

然后才发现floor用法

//std::floor() 返回的结果类型与其参数类型相同,即如果参数是浮点数类型,返回值也将是浮点数类型。

只能采取强制转换┭┮﹏┭┮

#include<cstdio>
#include<cmath>
	using namespace std;
	int main() {
		int h, r;
		scanf("%d %d", &h, &r);//涉及到整数与小数混合运算
		printf("%d", (int)std::floor((20000 / (3.14 * r * r * h)) + 1));//std::floor() 返回的结果类型与其参数类型相同,即如果参数是浮点数类型,返回值也将是浮点数类型。
		return 0;//所以上面使用std::floor,前必须在前面强制转换(int)
	}//3.288691为什么会在添加字母后输出结果不一样???那是因为,该数据是%lf小数,而不是%d整数类型
//故需要强制转换

一些小小收获

/*在 C++ 中,向下取整和向上取整的函数分别是 floor() 和 ceil()。它们都定义在 <cmath> 头文件中。
floor() 函数的作用是把一个浮点数向下取整为最接近它且小于它的整数,返回值类型为浮点数。使用方式如下:
#include <cmath>
double x = 3.8;
double y = floor(x); // y的值为3.0
以上代码中,调用 floor(x) 函数会返回 3.0,赋值给变量 y。
ceil() 函数的作用是把一个浮点数向上取整为最接近它且大于它的整数,返回值类型为浮点数。使用方式如下:
#include <cmath>
double x = 3.2;
double y = ceil(x); // y的值为4.0*/

//整数与小数的运算不能取膜

//std::floor() 返回的结果类型与其参数类型相同,即如果参数是浮点数类型,返回值也将是浮点数类型。

//std::floor()与floor(),实质一样

/*std::floor() 是 C++ 标准库中提供的函数,用于对浮点数进行向下取整的操作。它定义在 <cmath> 头文件中,并位于 std 命名空间中。使用 std::floor() 函数可以保证代码的可移植性和标准性。
而 floor() 是 C 语言标准库中提供的函数,同样用于对浮点数进行向下取整的操作。它定义在 <math.h> 头文件中。floor() 函数不属于任何命名空间,因为 C 语言本身不支持命名空间的概念。
实际上,std::floor() 与 floor() 在功能上是相同的,都可以对浮点数进行向下取整操作,并返回 double 类型的结果。两者的算法也是一致的。只是 std::floor() 是 C++ 中提供的更加规范和类型安全的方式,而 floor() 则是 C 语言中使用的方式。
如果你在 C++ 程序中,建议使用 std::floor() 函数。如果在 C 程序中,可以直接使用 floor() 函数。*/

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

满月居于月空、

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值