C ++非常长的整数位计数器

时间:2018-03-23 12:46:41

标签: c++ integer long-integer

我有一个用C ++创建程序的作业,它可以计算极长整数的数字。

给出两个随机数a和b(1 <= a,b <= 10 ^ 16)。我需要找到数字a ^ b(a到功率b)有多少位数。 (我不需要知道数字本身,只知道它有多少位数)

我对如何解决这个问题几乎没有想法,我想到的一种方法是创建一个单独的结构,它可以保存这些非常长的整数,并且可以对它们进行乘法运算,但这需要很长时间才能完成多次乘法,程序的时间限制是1s。也许在C ++中有某种功能或类似功能可以帮助我?

提前感谢您的帮助!

3 个答案:

答案 0 :(得分:5)

基数N中的数字B的位数是floor(log B N)+ 1.所以你需要计算楼层(log 10 (a b ))+ 1等于floor(b * log 10 a)+ 1

floor将数字向下舍入到最接近的整数。在<cmath>

中可以使用floor和log10函数

答案 1 :(得分:1)

使用对数,这可以通过&#34; small&#34;来解决。数字: log(a ^ b)= log(a)* b

您要查找的号码将是

auto exp = math.log10(a) * b;

您需要将thix结果舍入到高于此值的较低整数

答案 2 :(得分:0)

你将从用户那里获取数字,你将(int temp)在代码中使用它,你将从(cmath)库调用pow函数,如果你想打印两个数字的功能调用这个函数和你将从(1)到(幂数)进行for循环,在这个循环中,你将等于temp和counter,并且你将打印出这个temp  这就是代码。

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

void power_digit();

int main()
{
    power_digit();   
}
void power_digit()
{
    int x , y ,temp ;
    string result;
    cout << "\nEnter number one :";
    cin >> x ;
    cout << "\nEnter number two :";
    cin >> y ;
    cout << "The power of x and y is : "<< pow(x,y);
      for (int i = 1 ; i < y ; i++)
    {
        temp =  i ;
    }
    cout << "\nThe digit of result is :" << temp;
}