[英]C++ very long integer digit counter
我分配了一个用C ++创建程序,该程序将计算极长整数的位数。
我给了两个随机数a和b(1 <= a,b <= 10 ^ 16)。 我需要找出数字a ^ b(a等于b的幂)有多少个数字。 (我不需要知道数字本身,只需知道它有多少个数字)
我对如何解决这个问题知之甚少,我想到的一种方式是创建一个单独的结构,该结构可以容纳这些非常长的整数,并且能够对其进行乘法运算,但是要进行如此多次的乘法运算则要花费极长时间。次,该程序的时间限制为1秒。 也许在C ++中有某种功能或类似的功能可以帮助我?
谢谢您的帮助!
以B
为底的数字N
的位数是floor(log B N)+1。因此,您需要计算floor(log 10 (a b ))+ 1,它等于floor(b * log 10 a)+ 1个
floor将数字四舍五入到最接近的整数。 <cmath>
库中提供了floor和log10功能
使用对数,可以用“小”数字解决:log(a ^ b)= log(a)* b
您正在寻找的号码将是
auto exp = math.log10(a) * b;
您需要将thix结果四舍五入为比该值高的整数
您将使用用户的数字,然后执行(int temp)在代码中使用它,然后从(cmath)库调用pow函数,如果您想打印两个数字的幂,请调用此函数,然后执行一个for循环,从(1)到(power number),在这个循环中,您将使temp和counter相等,并且在循环外,您将打印该温度,这就是代码。
#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;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.