ural 1011 Conductors

本文介绍了一种解决特定数学问题的编程方法,通过调整数值精度并利用整数运算避免浮点误差,最终找到满足条件的最小整数i。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题意:(差点没看懂题目。。。囧)前面那个好像是说那句话有两种理解。。。一种是。。。售票员在公共汽车上裸奔?还有一种是。。。。?。。。(无关紧要- -)

给精确到0.01的p和q,求最小的i,使得存在整数x,i*p < x < i*q。

思路:(这道题我WA了好多次我会说麽。。。)我还是不晓得怎么弄精度的东西。。。希望高人指点啊。。。我的做法是。。。由于p和q是精确到0.01,我就把p和q都扩大到100倍。。。这样就没有浮点误差了吧干!剩下的就好说了。。。

#include <cstdio>
#include <cstring>
#include <cstdlib>
int p, q;
int solve()
{
	int l, h;
	for (int i = 1; i <= 10000; ++ i)
	{
		l = i*p;
		h = i*q-1;
		if (l/10000 != h/10000) return i;
	}
	return 10000;
}
bool isdigit(char c) { return (c>='0' && c<='9'); }
int func()
{
	char data[10];
	scanf("%s",data);
	int ret=0, i;
	for (i = 0; data[i]!='.'&&data[i]!='\0'; ++ i) ret = ret*10 + data[i]-'0';
	ret *= 100;
	if (strlen(data)-i == 2) ret += (data[i+1]-'0')*10;
	else if (strlen(data)-i == 3) ret += (data[i+1]-'0')*10 + data[i+2]-'0';
	return ret;
}
void input()
{
	p = func();
	q = func();
}
int main()
{
	input();
	printf("%d\n", solve());
	system("pause");
}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值