1. 程式人生 > >T^T問題求個位數(快速冪||位運算||找規律)

T^T問題求個位數(快速冪||位運算||找規律)

原始碼培訓:

今日水題

描述

T^T這個很像一個流淚的表情是不是!其實,它是T的T次方啦~。
當T比較大的時候T^T會非常大,現在只要你求這個數的個位就可以啦!

輸入

輸入包括多組測試資料,每個測試資料只有一個數字

解題思路(一)

看到只取個位數,第一反應找規律,末尾數相當於是一個迴圈,只要找
出迴圈規律即可,簡單粗暴。

try:
    while 1:
        n=input()
        n=int(n)
        l=[]
        a=1
        for i in range(1,n+2):
            a=a*n
            d=str(a)
            c=int(d[-1])
            if c not in l:
                l.append(c)
            else:
                break
        print(l)    
        if len(l)==1:
            print(l[0])
        else:
            b=n%len(l)
            print(l[b-1]) 
except EOFError:
    pass

解題思路(二)

當然找規律是取巧方法(能AC的方法都是好方法(小聲bb)),這題
我們也可以用快速冪來做,當然python超時了,轉C。畢竟毛學姐出的這道題
本意是讓用快速冪來解決。

python程式碼:

(雖然超時但還是很快的)

try:
    while 1:
        n=int(input())
        a=n
        b=n
        c=1
        while b!=0:
            if b%2==1:
                b=(b-1)/2
                c*=a%10
            else:
                b/=2
            a*=a%10
        c=str(c)
        c=int(c[-1])
        print(c)
except EOFFrror:
    pass

C程式碼:

#include<stdio.h>
int main()
{
	int a,b,n,ans;
	while(scanf("%d",&n))
	{
		a=n;b=n;
		ans=1;
		while(b!=0){
			if(b%2==1){b=(b-1)/2; ans*=a%10;}
			else b/=2;
			a*=a%10;
		}
	printf("%d",ans)
	}
	return 0;
}