1061 n^n的个位数

//http://acm.hdu.edu.cn/showproblem.php?pid=1061

题目的意思很简单,就是要求出nn次幂的各位数字。但是n的范围非常大。1<=N<=1,000,000,000

代码:



#include<iostream>


using namespace std;




int data[10][4] = {{0,0,0,0},{1,1,1,1},{6,6,4,4},{3,3,7,7},


{6,4,6,4},{5,5,5,5},{6,6,6,6},{7,7,3,3},{6,6,4,4},{1,9,1,9}};




int main()


{


     int text;


     cin >> text;


     while(text --)


     {


         long long n;


         int a,b;


         cin >> n;


         a = n % 10;


         b = n % 4;


         cout << data[a][b] << endl;


     }


     return 0;


}


//数据量那么大,想到的方法一定是总结规律了,既然只要各位数字,我就发现只要个位数字是0156;的,不论多少次幂,各位是数字永远都是本身,之后我们看2:(各位数字变化的规律是4   8   6   2循环)之后我一次找到了这样的一个数组:

Data[10][4] = {{0,0,0,0},{1,1,1,1},{4,8,6,2},{3,9,7,1},{6,4,6,4},

{5,5,5,5},{6,6,6,6},{9,3,1,7},{4,2,6,8},{1,9,1,9}}

如果你还不理解,那么我把这个数组这样表示:

行下标   (i次幂后的各位数字变化情况)

0 0 0 0 0

1 1 1 1 1

2 4 6 8 2

3 3 9 7 1

4 6 4 6 4

5 5 5 5 5

6 6 6 6 6

7 9 3 1 7

8 4 2 6 8

9 1 9 1 9

这回就清晰了吧!不过这个不是最后想要的结果。我是从这里面想到了要把n对4取余。

之后就重新找规律,这回看的就让n =2 12 22 32 42……,算出nn

次幂的各位数字是什么,然后再把这个数字放到data[n%10][n%4]的位置。这样就构造出来代码中的那个数组了(需要说明的是数组黄色字体部分,这里面的数字应该是多少都可以的,可以这样理解,如n的各位数字都是2的时候,那么n % 4的结果只能是0或者2。也就是说13的位置的数字是用不上的,但是这里又不能直接把这两列省略,因为当n的各数字是三的时候,n %4的结果就只能是 13

说了这么多,我觉得问题应该是都清晰了,对于我上面的代码你也应该能理解了。(*^__^*)嘻嘻……

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值