阿里网测 -- 编程总结

问答题

实数数对 b - 1, 在数学上称之为卜踆哉 数对,又称B数对,他们有很多有趣的数学的特点,其中参数b称之为该数对的b因子。比如3.15晚会的月份和日期就组成一个B数对,对应的b因子为4.在一些工程领域,经常需要计算的值,其中为向下取整操作,比如。请根据参数(a, b, c),计算该数据的值。其中,1 <= b <= 10000; 1<= c <= 10000; 1<= d <= 10000;

#include<iostream>
#include<vector>
#include<numeric>
#include<limits>


using namespace std;

/*请完成下面这个函数,实现题目要求的功能*/
/*当然,你也可以不按照下面这个模板来作答,完全按照自己的想法来^-^ */
/***************************************开始写代码**************************************************/
int bcz(int b, int c, int d) {


}
/***************************************结束写代码**************************************************/

int main(int argc, char* grav[])
{
	int b, c, d;
	cin >> b >> c >> d;
	cout << "结果为:" << bcz(b, c, d) << endl;
	system("pause");
	return 0;

}


我的回答:

要考虑的问题:

1.手动实现开方(二分类,牛顿迭代法)

2.手动实现n次幂

3.double类型如何向下取整,因为不能再加入别的头文件,所有优点麻烦,没想出来。直接转int精度是一个问题

4.求余的计算

#include<iostream>
#include<vector>
#include<numeric>
#include<limits>

//#include<stdio.h>

using namespace std;

/*请完成下面这个函数,实现题目要求的功能*/
/*当然,你也可以不按照下面这个模板来作答,完全按照自己的想法来^-^ */
/***************************************开始写代码**************************************************/
double sqrtBinary(double A)
{   /**二分法实现开方
	需要注意的是:
	1.初始上界是A+0.25,而不是A
	2.double型的精度DBL_EPSILON,不能随意指定
	*/

	double a = 0.0, b = A + 0.25, m;  // b = A 是错误的上届
	/*while(b - a > 2*DBL_EPSILON){  //sometimes dead cycle when m == a or m == b.*/
	for (;;)
	{
		m = (b + a) / 2;
		if (m - a < DBL_EPSILON || b - m < DBL_EPSILON) break;
		if ((m*m - A) * (a*a - A) < 0) b = m;
		else a = m;
	}
	return m;
}
double nPow(double temp, int timeNum)
{  /*求temp的timeNum次方*/
	for (int i = 0; i < (timeNum-1); ++i)
	{
		temp = temp*temp;
	}
	return temp;
}
string downInt(double temp)
{   /*实现double类型temp取下整*/
	

}
int bcz(int b, int c, int d) {
	double midDou;
	midDou = b - 1 + sqrtBinary(b*b - 1);  //计算(b-1 + (b^2 - 1)^0.5)
	midDou = nPow(midDou, c);  //计算(b-1 + (b^2 - 1)^0.5)^c
	midDou = downInt(midDou);  //计算 |_ (b-1 + (b^2 - 1)^0.5)^c _|
	midDou = midDou % d;  //会报错
	return (int)(midDou);


}

/***************************************结束写代码**************************************************/

int main(int argc, char* grav[])
{
	int b, c, d;
	cin >> b >> c >> d;
	cout << "结果为:" << bcz(b, c, d) << endl;
	system("pause");
	return 0;

}


  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值