HDU 1061 Rightmost Digit

来源:互联网 发布:在淘宝上如何开店步骤 编辑:程序博客网 时间:2024/06/05 18:50
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
234
Sample Output
76
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.
任何两个数相乘的最低位一定是它们最低位相乘所得结果的最低位。如9999 可转化为求99个9相乘后最低位是什么,而同一个数连乘结果是具有周期性的,周期不大于10,所以可以通过找规律解决。
#include<stdio.h>int r[25]={0,1,4,7,6,5,6,3,6,9,0,1,6,3,6,5,6,7,4,9,0};int main(){    int t,n;    scanf("%d",&t);    while(t--)    {        scanf("%d",&n);        printf("%d\n",r[n%20]);    }    return 0;}

还可以用快速幂求解
#include<iostream>using namespace std;int judge(int n){int k=n,a=n,b=1;a %= 10;while(k > 1){if(k%2){b *= a;b %= 10;--k;}else{a *= a;a %= 10;k /= 2;}}a *= b;a %= 10;return a;}int main(){int T,n;cin>>T;while(T--){cin>>n;cout<<judge(n)<<endl;}return 0;}

0 0