【问题标题】:C++ very long integer digit counterC++ 非常长的整数数字计数器
【发布时间】:2018-03-27 01:43:05
【问题描述】:

我有一个任务要在 C++ 中创建一个程序,该程序将计算极长整数的位数。

我有两个随机数 a 和 b (1

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

提前感谢您的帮助!

【问题讨论】:

  • ^ 你的意思是异或还是幂?我认为这是力量,因为 10^16 xor 10^16 不是一个大数字
  • 我认为他的意思是权力,而不是异或
  • 我的意思是权力 b。
  • 我认为像b * log10(a) 这样的东西应该可以工作
  • 下一篇,请拿出自己的努力。

标签: c++ integer long-integer


【解决方案1】:

基数B中的数字N的位数是 floor(logBN) + 1。所以你需要计算 floor(log10(ab)) + 1 等于 floor(b*log10a) + 1

floor 将数字向下舍入到最接近的整数。 <cmath> 库中提供 floor 和 log10 函数

【讨论】:

  • 我认为你应该加 1 并四舍五入,因为10 * log10(10) = 10,但 10^10 有 11 个数字
【解决方案2】:

使用对数,这可以用“小”数来解决: 日志 (a^b) = 日志 (a) * b

你要找的号码是

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

您需要将 thix 结果四舍五入到比该值高的较小整数

【讨论】:

  • 我认为应该澄清的是,您应该始终向上舍入到高于exp 的最接近的整数——无论它是否包含小数。否则会给出 10^10 的错误答案
【解决方案3】:

您将从用户那里获取数字,然后您将执行 (int temp) 在代码中使用它,您将从 (cmath) 库中调用 pow 函数,如果您想打印调用此函数的两个数字的幂,并且您将执行从 (1) 到 (power number) 的 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;
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-01-16
    • 2014-02-02
    • 1970-01-01
    • 1970-01-01
    • 2016-12-23
    • 1970-01-01
    • 1970-01-01
    • 2011-09-23
    相关资源
    最近更新 更多