Problem Description Given a positive integer N, you should output the most right digit of N^N. Input The input contains several test cases. The first line of the input is a single integer T which is the number of test cases. T test cases follow. Each test case contains a single positive integer N(1<=N<=1,000,000,000). Output For each test case, you should output the rightmost digit of N^N. Sample Input 2 3 4 Sample Output 7 6 Hint In the first case, 3 * 3 * 3 = 27, so the rightmost digit is 7. In the second case, 4 * 4 * 4 * 4 = 256, so the rightmost digit is 6.
我写的错误???错误的原因是超时,
//rightmost digit #include<iostream> using namespace std; int main() { int n,tmp,m; cin>>n; while(n--){ cin>>m; tmp=1; m%=10; // cout<<"m-==="<<m<<endl; for(int i=0;i<m;i++) tmp=tmp*m%10; cout<<tmp<<endl; } }
正确代码:
#include<iostream> using namespace std; int main() { int a,ans,n=0; double dval = 0; int count=0; cin>>n; while(n--) { cin>>a; ans=1; count=a; a = a%10; while (count) { if (count&1==1) ans=(ans*a)%10; a=(a*a)%10; count>>=1; } cout<<ans<<endl; } return 0; }
#include<iostream> using namespace std; int main() { int a,ans,n=0; double dval = 0; int count=0; cin>>n; while(n--) { cin>>a; ans=1; count=a; a = a%10; while (count) { if (count&1==1) ans=(ans*a)%10; a=(a*a)%10; count>>=1; } cout<<ans<<endl; } return 0; }
杭电 1061 Rightmost Digit计算N^N次方的最后一位
原文:https://www.cnblogs.com/helloworld2019/p/10434470.html