Rightmost Digit
Time Limit : 2000/1000ms (Java/Other) Memory Limit : 65536/32768K (Java/Other)
Total Submission(s) : 175 Accepted Submission(s) : 38
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.
[/hint]
#include<iostream>
using namespace std;
constexpr long long quickpow(long long x)noexcept
{
long long ans = 1, cnt = x;
while (cnt)
{
if (cnt % 2 != 0)
{
ans = (ans*x)%10;
}
x = (x * x)%10;
cnt >>=1;
}
return ans;
}
int main()
{
long long x=0, y=0, ans=0;
cin >> y;
while (y--)
{
cin >> x;
ans = quickpow(x);
cout << ans % 10 << endl;
}
return 0;
}
基于某位科普的快速幂的基础下用C++整了一哈,总归还是收获蛮多