所以,如果我正确理解c ++和对数。像这样的东西应该给我一个我想要的基础?
我遇到了一些问题,但认为这种方式是正确的开始。
#include <iostream>
using namespace std;
int main(void)
{
int x = 2;
int y = 64;
int value = log x (y);
cout << value << endl;
return 0;
}
这应显示&#34; 6&#34;,但我不确定如何真正使用对数库..
答案 0 :(得分:4)
对数问题有三个部分。基础,论证(也称为权力)和答案。您试图找到2(基数)必须乘以得到64(答案)的次数。
所以不要处理权力和猜测。我们只计算基数除以答案64的次数,直到我们得到1.
64 / 2 = 32
32 / 2 = 16
16 / 2 = 8
8 / 2 = 4
4 / 2 = 2
2 / 2 = 1
这里我们计算6行,所以你将答案64除以基数2,6次。这就像说你提高2到6的能力来获得64。
嗯,为了工作,你需要math.h库。如果你想在没有它的情况下这样做。你可以做一个循环,你不断地除以用户给出的基数。
int base = 0;
int answer = 0;
int exponent = 0;
cout << "Please type in your base";
cin >> base;
cout << "Please type in your answer";
cin >> answer;
while (answer != 1)
{
answer /= base;
exponent++
}
cout << "The exponent is " << exponent;
答案 1 :(得分:3)
对数的实现大多数是tayler函数,其与基数e的对数近似。要获得任何其他基数的对数,您可以执行以下操作:
#include <cmath>
double y = std::log(x)/std::log(base);
说明
供您参考:
答案 2 :(得分:1)
这是一个更好的实现,不使用math.h库。我可能有一些多余的代码,因为我用C ++编写了一年就好了。 (对我感到羞耻)感谢您提出的问题让我想要了解我的C ++!
#include <iostream>
#include <iomanip>
using namespace std;
int main()
{
float base = 0;
float answer = 0;
int exponent = 0;
cout.precision(4);
cout << "Please type in your base \n";
cin >> base;
cout << "Please type in your answer\n";
cin >> answer;
cout << fixed;
while (answer > base)
{
answer /= base;
exponent++;
}
cout << "The exponent is: " << exponent << endl;
cout << "The Remainder is: " << fixed << answer << endl;
return 0;
}