查找非常大的 2^n 数字的最后一位

Finding the last digit of a very large 2^n number

正如标题所说,我想找到一个 2^n 数字的最后一位。

我知道这是关于重复偶数,但我不知道如何实现它。

这是我做的:

return (2*ascii%10)%10 - 2;

但这不是正确的方法

例如:

我得到了 2^97,找到这个非常大的数字的最后一位。 谢谢!

2 的幂:

2, 4, 8, 16, 32, 64, 128, 256...

最后一位数字:

2, 4, 8, 6, 2, 4, 8, 6...

2^i 的最后一位是:

int arr[4] = {2, 4, 8, 6};
return arr[(i-1)%4];

假设 ld(x) 表示 x 的最后一位。我们得到了:

ld( pow( 2, 1 ) ) = 2

ld( pow( 2, 2 ) ) = 4

ld( pow( 2, 3 ) ) = 8

ld( pow( 2, 4 ) ) = 6

ld( pow( 2, 5 ) ) = 2

看到这里的规律了吗?有一个:如果指数等于:

(4 的倍数)+ 1 你得到 ld(x) == 2

(4 的倍数)+ 2 你得到 ld(x) == 4

(4 的倍数)+ 3 你得到 ld(x) == 8

(4 的倍数)+ 0 你得到 ld(x) == 6

在 C/C++ 中你可以这样做:

int lastDigit;
if ( exp == 0 )
    lastDigit = 1; // special case
int rem = exp % 4;
switch ( rem )
{
    case 1: lastDigit = 2;break;
    case 2: lastDigit = 4;break;
    case 3: lastDigit = 8;break;
    case 0: lastDigit = 6;break;
}