【问题标题】:Second digit from the right from a huge number一个巨大的数字从右数第二个数字
【发布时间】:2012-11-19 21:15:30
【问题描述】:

现在我实际上阅读了模数运算并设法获得了某个数字的最后一位。好的。但是现在......我如何获得倒数第二位?右边第二个。实际上,我连续几个小时一直在努力寻找一个简单的解决方案,这是迄今为止我能想到的最好的解决方案,但仍然不是。有人可以帮我吗?

这是我目前所拥有的

long long powmod(long long n, long long exp)
{
    long long r, result = 1;

    while(exp)
    {
        r = exp % 2;
        exp /= 2;
        if(r == 1) result = result * n % 10;
        n = (n * n) % 10;
    }
    return result;
}

提前致谢

【问题讨论】:

  • 如果你知道如何得到右手数字,那么给定一个像 1234 这样的数字,你会除以什么得到 123,你已经知道如何得到右手数字?跨度>

标签: c++ modular digit


【解决方案1】:

将它除以十,向下取整,然后得到剩下的最后一位数。 :-)

【讨论】:

  • 通过“它”,你的意思是n^exp的结果,使用普通的非模幂运算?只要结果符合long long,它就可以工作,但是如果 OP 想要2^1000 的第二个数字怎么办?
  • 是的,这就是问题所在,我知道我可以将其除以 10,但它不适用于大数字
【解决方案2】:

由于您只要求倒数第二个数字,那么获取最后两位数,然后除以十怎么样?

即求解a^n mod 100,然后看十位数。

【讨论】:

  • 谢谢!最简单的解决方案并不总是那么明显:P
猜你喜欢
  • 2020-07-06
  • 2012-06-04
  • 2017-02-13
  • 1970-01-01
  • 2019-02-16
  • 1970-01-01
  • 2019-06-23
  • 2020-08-11
  • 1970-01-01
相关资源
最近更新 更多