T^T問題(18.11.25)
阿新 • • 發佈:2018-11-28
T^T問題
題目描述:
T^T這個很像一個流淚的表情是不是!其實,它是T的T次方啦~。當T比較大的時候T^T會非常大,現在只要你求這個數的個位就可以啦
Input
輸入包括多組測試資料,每個測試資料只有一個數字T(0<T<2^31)
Output
請輸出T^T的個位數
Sample Input 1
1
2
3
105
Sample Output 1
1
4
7
5
題目的意思很好理解,就是就t的t次方,然後輸出個位上的數字。
這一題一開始的思路是打算用快速冪寫,設定兩個變數分別儲存底數和冪。先將底數對10取餘,然後再進行快速冪的運算。但是一開始的程式碼好像出了點問題,超時了。就換了一種思路。
第二種思路其實就是忽然發現吧輸入的那個數對100取餘後再進行計算,計算結果與直接對那個數進行運算是一樣的。
下面貼程式碼:
#include<stdio.h> int main() { int a,i,b,a1; while(scanf("%d",&a)!=EOF) { a%=100; //先對a取餘 b=a; a%=10; //對b賦值後再次對a取餘 a1=a; for(i=0;i<b-1;i++) a=(a*a1)%10; //直接求冪 printf("%d\n",a); } return 0; }
後來又聽說快速冪沒有問題,就又用快速冪寫了一遍,發現過了,才知道是自己第一次程式碼有問題。
下面是快速冪的程式碼:
#include<stdio.h> int main() { int a,i,b,a1,t,y; while(scanf("%d",&a)!=EOF) { b=a; //用b儲存冪 a%=10; //先對a取餘 t=1; y=a; while(b!=0) //進行快速冪求解 { if(b&1==1) //判斷二進位制的最後一位是否為1 t=t*y%10; y=y*y%10; b=b>>1; //對b進行位運算,右移一位 } printf("%d\n",t); } return 0; }
快速冪不理解的可以自己去查一下