求T^T的个位数

border="0" width="0" height="0" src="//music.163.com/outchain/player?type=0&id=821863911&auto=1&height=430">


求T^T的个位数
Description
这个很像一个流泪的表情是不是!其实,它是T的T次方啦~。当T比较大的时候T^T会非常大,现在只要你求这个数的个位就可以啦!
Input
输入包括多组测试数据,每个测试数据只有一个数字T(0<T<231)T(0<T<2 31)
Output
请输出T^T的个位数。
Sample Input 1
1
2
3
105
Sample Output 1
1
4
7
5

这只是我个人的理解

首先,这个题肯定不能暴力啊
最开始的思路来源:
说a的b次方的个位数 算法吧(a=b时就是这道题的T^T)
看完这段思路,就知道为啥b要%4了。。。
首先:a**b的个位数 : 等于 a的个位数 的b次方 即等于(a%10)^b的个位数
现在的问题就是观察0到9的b次方的个位数规律了(a%10范围0到9)
找找规律:
0,1,5,6的b次方结果的个位还是0,1,5,6
2的b次方结果的个位 以 2,4,8,6 循环 (b每增加4循环一次)
3的b次方结果的个位 以3,9,7,1循环 (b每增加4循环一次)
4:以4,6循环 (b每增加2循环一次)
7: 7,9,3,1循环 (b每增加4循环一次)
8: 8,4,2,6循环 (b每增加4循环一次)
9: 9,1循环 (b每增加2循环一次)
所以,所有数字把b每增加4次看成一个回合,写代码的时候先写上b=a%4
注意一下b==0的时候
下面这个是我最初的思路,完全没有整理整理就提交了。。bug满满的。。原谅我开始头脑简单四肢发达了

try:
    while 1:
        n=int(input())
        b=n%4
        while n>10:#其实这一行一点必要都没有。。当时的我竟然没有理解%10是啥东东来着!!!我的妈呀。。没救了
            n=n%10
        if n==0 or n==1 or n==5 or n==6 or n==9:  #n==9是后来写的。开始没有注意到。。
            print(n)
        elif n==2:
            L=[6,2,4,8]
            print(L[b])
        elif n==3:
            M=[1,3,9,7]
            print(M[b])
        elif n==4:
            N=[6,4,6,4]
            print(N[b])
        elif n==7:
            K=[1,7,9,3]
            print(K[b])
        elif n==8:
            O=[6,8,4,2]
            print(O[b])
       #elif n==9:     后来仔细想了一下,n==9的时候,奇数对4取余,肯定是奇数,也就是只能取到P[1],P[3],
            #P=[1,9,1,9]   然而P[1],P[3]开始恰好写的9,就这样AC了~~其实是不对的
            #print(P[b])     9的奇数次方个位数一定是9,9的偶数次方个位数一定是1,但这道题9的9次方,只有9这种情况。。
except EOFError:
    pass

取一个数的个位数就是n%10啊!!我当时想啥呢555~
当然了以后不能总是依赖python。所以我就按照这个思路转了个c。。

#include<stdio.h>
int main()
{
    int n;
    while(scanf("%d",&n)!=EOF)
    {
        int b;
        b=n%4;
        n=n%10;
        int I[40]={0,0,0,0,1,1,1,1,6,2,4,8,1,3,9,7,6,4,6,4,5,5,5,5,6,6,6,6,1,7,9,3,6,8,4,2,1,9,1,9};
        printf("%d\n",I[n*4+b]);
    }return 0;
}

后来我看了看大佬们的代码:代码实在是优秀啊!

然后我根据这个思路整理了一下:
后来提交的AC的代码

try:
    while 1:
        a=int(input())
        b=a%4
        if b==0:
            b=4
        print(((a%10)**b)%10)
except EOFError:
    pass

思路就是这样的,用c的话,直接转过去就行了。。
当然这道题也可以用快速幂的啦
毛学姐的快速幂代码:

def mi(a,b):
    a %= 10   
    res = 1
    while b!=0:
        if b & 1:                            # 意思就是:取2进制的最末位
            res=res * a % 10
        b >>= 1                             #意思就是: b=b//2
        a = a * a % 10
    return res

try:
    while 1:
        n=int(input())
        print(mi(n,n))
except EOFError:
    pass

个人总结。刚开始写博客啥的没啥经验,有建议的大佬们私聊啊

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值