第六届蓝桥杯大赛个人赛(软件类)校内选拔题目X^X=10

如果x的x次幂结果为10(参见【图1.png】),你能计算出x的近似值吗?


显然,这个值是介于2和3之间的一个数字。


请把x的值计算到小数后6位(四舍五入),并填写这个小数值。


注意:只填写一个小数,不要写任何多余的符号或说明。



当然这题使用暴力破解是可以的:

#include<iostream>
#include<iomanip>
#include<math.h>

using namespace std;

int main()
{
	double e=2.4;
	for(;;e=e+0.0000001)
	{
		double a=pow(e,e);
		if(fabs(a-10)<0.0000001) 
			cout<<fixed<<setprecision(6)<<e;
	}

	return 0;
}


但是用二分法可以大大减少计算时间:

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

int main()
{
	long double a=2.0,b=3.0,c=1,aa,bb,cc=1.0;
	while(fabs(cc)>1e-8)
	{
		c=(a+b)/2.0;
		aa=pow(a,a)-10.0,bb=pow(b,b)-10.0,cc=pow(c,c)-10.0;
		if(aa*cc<0) b=c;
		else if(bb*cc<0) a=c;
		cc=pow(c,c)-10.0;
	}
	cout<<fixed<<setprecision(7)<<c<<endl;
}







  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值