Finding the exponent of any number can be very troublesome as it grows exponentially. But in this problem you will have to do a very simple task. Given two non-negative numbers m and n, you will have to find the last digit of mn in decimal number system.
Input
The input file contains less than 100000 lines. Each line contains two integers m and n (Less than 10^101. Input is terminated by a line containing two zeroes. This line should not be processed.
Output
For each set of input you must produce one line of output which contains a single digit. This digit is the last digit of m^n.
Sample Input
2 2
2 5
0 0
Sample Output
4
2
问题简述:
计算n^m 的最后一位。
问题分析:
本题的关键是n和m都非常大。
对于n,只需要取最后一位进行计算就可以了。
对于m,处理起来就比较麻烦,需要掌握其规律。1位数字d的n次方,即d^n,会每4次方出现循环,所以只需要考虑n的最低2位(百位以上是4的倍数),再做个模除4再行计算即可。
程序说明:(略)
题记:(略)
参考链接:(略)
/* UVA10515 Powers Et Al. */
#include <bits/stdc++.h>
using namespace std;
const int MOD = 4;
int getb(string n)
{
if (n.size() == 1)
return n[0] - '0';
int b =n[n.size() - 1] - '0';
b = b + (n[n.size() - 2] - '0') * 10;
b %= 4;
if (b == 0)
b=4;
return b;
}
int main()
{
string m, n;
while(cin >> m >> n && (m != "0" || n != "0")) {
int a = m[m.length() - 1] - '0';
int b = getb(n);
int ans = a;
for(int i = 1; i < b; i++)
ans *= a;
printf("%d\n", ans % 10);
}
return 0;
}