问答题
实数数对 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;
}