c ++试图找出对数计算

时间:2015-10-15 23:51:21

标签: c++ base logarithm exponent

所以,如果我正确理解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;,但我不确定如何真正使用对数库..

3 个答案:

答案 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);

说明

  • std :: log()自然对数基础e。
  • y =结果
  • base =对数的基数。像2或10。

供您参考:

答案 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;
}