HDU Rightmost Digit
2014-12-10 01:06
531 查看
题目描述:
给出一个n,求n^n结果最右边的数字是什么?
问题分析:
最右边的数字,是n最右边的数字进行乘法运算得到的,所以只要计算最右边数字的幂方就行了。
当n很大的时候,不可能将最右边数字相乘结果算出来,只能通过一定的规律来处理。
最右边的数字假设为m,则m的范围为1、 2 、 3 、... 、 8 、9 、0;
m = 1;无论多少都是1
m = 2; 则出现 2 4 8 6 2
m = 3; 则出现3 9 7 1 3
m = 4; 则出现4 6 4
m = 5 、6 ,则出现 5 、 6
m = 7; 则出现7 9 3 1 7
m = 8; 则出现8 4 2 6 8
m = 9; 则出现9 1 9
m = 0;为 0;
可以得出规律,一个数字的幂方,是在周期为4的循环中。所以只要判断最右边数字的幂方和4的余数就可以了。
#include <stdio.h>
#include <math.h>
/*
1 1
2 4 8 6 2
3 9 7 1 3
4 6 4
5 5
6 6
7 9 3 1 7
8 4 2 6 8
9 1 9
0 0
*/
int main()
{
unsigned long int n;
int i, m;
scanf("%d", &i);
while(i > 0)
{
scanf("%ld", &n);
m = n % 10;
n = n % 4;
if (n == 0) n = 4;
printf("%d\n", pow(m, n));
--i;
}
return 0;
}
给出一个n,求n^n结果最右边的数字是什么?
问题分析:
最右边的数字,是n最右边的数字进行乘法运算得到的,所以只要计算最右边数字的幂方就行了。
当n很大的时候,不可能将最右边数字相乘结果算出来,只能通过一定的规律来处理。
最右边的数字假设为m,则m的范围为1、 2 、 3 、... 、 8 、9 、0;
m = 1;无论多少都是1
m = 2; 则出现 2 4 8 6 2
m = 3; 则出现3 9 7 1 3
m = 4; 则出现4 6 4
m = 5 、6 ,则出现 5 、 6
m = 7; 则出现7 9 3 1 7
m = 8; 则出现8 4 2 6 8
m = 9; 则出现9 1 9
m = 0;为 0;
可以得出规律,一个数字的幂方,是在周期为4的循环中。所以只要判断最右边数字的幂方和4的余数就可以了。
#include <stdio.h>
#include <math.h>
/*
1 1
2 4 8 6 2
3 9 7 1 3
4 6 4
5 5
6 6
7 9 3 1 7
8 4 2 6 8
9 1 9
0 0
*/
int main()
{
unsigned long int n;
int i, m;
scanf("%d", &i);
while(i > 0)
{
scanf("%ld", &n);
m = n % 10;
n = n % 4;
if (n == 0) n = 4;
printf("%d\n", pow(m, n));
--i;
}
return 0;
}
相关文章推荐
- hdu 1061 Rightmost Digit (模幂运算)
- HDU 1061 Rightmost Digit
- hdu_1061_Rightmost Digit
- HDU——1061 Rightmost Digit
- HDU 1061 Rightmost Digit (快速幂取模)
- hdu1061 Rightmost Digit
- HDU 1061 Rightmost Digit
- (hdu 1061)Rightmost Digit
- HDU 1061-Rightmost Digit
- HDU1061 Rightmost Digit
- hdu Rightmost Digit&&Leftmost Di…
- HDU 1061 Rightmost Digit
- Rightmost Digit(HDU 1061)
- hdu-oj 1061 Rightmost Digit
- HDU_1061_RightmostDigit
- hdu 1061 Rightmost Digit
- 【HDU】1061 Rightmost Digit
- hdu 1061 Rightmost Digit
- hdu 1061 Rightmost Digit
- hdu 1061 Rightmost Digit