原文链接: wmq的数学课
上一篇: A. Shell Game
下一篇: PATB 1050. 螺旋矩阵(25)
发布时间: 2017年5月7日 22:58 最后更新: 2017年5月7日 23:01 时间限制: 1000ms 内存限制: 512M
描述
wmq选了一门非常神奇的数学课,这门课的老师经常会出一些有趣的问题。今天他们的老师布置了这样的一份作业:给定x和y,请求出x^y的个位数字是多少
输入
第一行为一个正整数T(1 \leq T \leq 1000)
之后T行每行有两个数字x和y
代表一道作业题目,x和y的含义如题目所示
其中x为不超过10^5的正整数,y为不超过10^{9}的非负整数
输出
对于每道题,给出一个一位非负整数,即这道题目的答案
样例输入1 复制
3 5 2 6 3 2 4
样例输出1
5 6 6
提示
5*5=25,个位数是5
6*6*6=216,个位数是6
2*2*2*2=16,个位数是6
注意特殊情况
#include <iostream>
#include <cstdio>
using namespace std;
//找规律,尾数的次幂有循环节
int fun(int x, int y) {
int ans;
if (x == 0)
ans = 0;
else if (y == 0)
ans = 1;
else if (x == 0 || x == 5 || x == 1 || x == 6) {
ans = x;
} else if (x == 2) {
int a[4] = { 2,4,8,6 };
ans = a[(y - 1) % 4];
} else if (x == 3) {
int a[4] = { 3,9,7,1 };
ans = a[(y - 1) % 4];
} else if (x == 4) {
int a[4] = { 4,6 };
ans = a[(y - 1) % 2];
} else if (x == 7) {
int a[4] = { 7,9,3,1 };
ans = a[(y - 1) % 4];
} else if (x == 8) {
int a[4] = { 8,4,2,6 };
ans = a[(y - 1) % 4];
} else if (x == 9) {
int a[4] = { 9,1 };
ans = a[(y - 1) % 2];
}
return ans;
}
int main(int argc, char *argv[]) {
int T;
scanf("%d", &T);
while (T--) {
int a, b;
scanf("%d %d", &a, &b);
printf("%d\n",fun(a % 10, b));
}
return 0;
}