我有一个用C ++创建程序的作业,它可以计算极长整数的数字。
给出两个随机数a和b(1 <= a,b <= 10 ^ 16)。我需要找到数字a ^ b(a到功率b)有多少位数。 (我不需要知道数字本身,只知道它有多少位数)
我对如何解决这个问题几乎没有想法,我想到的一种方法是创建一个单独的结构,它可以保存这些非常长的整数,并且可以对它们进行乘法运算,但这需要很长时间才能完成多次乘法,程序的时间限制是1s。也许在C ++中有某种功能或类似功能可以帮助我?
提前感谢您的帮助!
答案 0 :(得分:5)
基数N
中的数字B
的位数是floor(log B N)+ 1.所以你需要计算楼层(log 10 (a b ))+ 1等于floor(b * log 10 a)+ 1
floor将数字向下舍入到最接近的整数。在<cmath>
库
答案 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;
}