您的位置:首页 > 其它

hdu1.2.4 Rightmost Digit

2014-08-16 17:44 176 查看
[align=left]Problem Description[/align]
Given a positive integer N, you should output the most right digit of N^N.

 
[align=left]Input[/align]
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).

 
[align=left]Output[/align]
For each test case, you should output the rightmost digit of N^N.

 
[align=left]Sample Input[/align]

2
3
4


 
[align=left]Sample Output[/align]

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.

快速求幂算法

import java.io.FileInputStream;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.io.OutputStreamWriter;
import java.io.StreamTokenizer;

public class Main implements Runnable
{
private static final boolean DEBUG = false;
private BufferedReader cin;
private PrintWriter cout;
private StreamTokenizer tokenizer;
private int n;

private void init()
{
try {
if (DEBUG) {
cin = new BufferedReader(new InputStreamReader(
new FileInputStream("d:\\OJ\\uva_in.txt")));
} else {
cin = new BufferedReader(new InputStreamReader(System.in));
}

cout = new PrintWriter(new OutputStreamWriter(System.out));
tokenizer = new StreamTokenizer(cin);

} catch (Exception e) {
e.printStackTrace();
}
}

private String next()
{
try {
tokenizer.nextToken();
if (tokenizer.ttype == StreamTokenizer.TT_EOF) return null;
else if (tokenizer.ttype == StreamTokenizer.TT_NUMBER) {
return String.valueOf((int)tokenizer.nval);
} else return tokenizer.sval;
} catch (Exception e) {
e.printStackTrace();
return null;
}
}

private void input()
{
n = Integer.parseInt(next());
}

private void solve()
{
int product = 1;
int a = n % 10, b = n;

while (b != 0) {
if ((b & 1) != 0) product = product * a % 10;

a = (a % 10) * (a % 10) % 10;
b >>= 1;
}

cout.println(product);
cout.flush();
}

public void run()
{
init();

int t = Integer.parseInt(next());
while (t-- > 0) {
input();
solve();
}
}

public static void main(String[] args)
{
new Thread(new Main()).start();
}
}


内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: