#2231. N^N最左边和最右边的数

N^N最左边和最右边的数

题目描述

现给你一个正整数NN,请问NNN^N的最左边和最右边的数字是什么?

输入格式

输入包含多组测试数据。每组输入一个正整数NN

输出格式

对于每组输入,输出NNN^N的最左边和最右边的数字。

样例

3
5
2 7
3 5

数据规模与约定

N1000000N\le 1000000

提示

n^n非常大,直接算是得不到结果的。但是我们知道任意一个整数都可以化成a*10^k 比如16 = 1.6 * 10^1,27 = 2.7 * 10 ^1 那么对于本题n^n = a * 10 ^ k 根据题意,我们要想办法算出a大概是多少,然后强制转换为整型,其结果就是n^n结果最左边的数 我们可以两边同时取以10为底的对数:

log10(n^n) = log10(a\*10^k)

左边:

log10(n^n) = nlog10(n)

右边:

log10(a*10^k) = log10(a) + log10(10^k)
nlog10(n) =  log10(a) + k
我们知道`a>0&&a<10,所以 log10(a)的结果是非常小的,所以nlog10(n) ≈ k`
so:
  log10(a) = nlog10(n) - int(nlog10(n))
   a = 10^(nlog10(n) - int(nlog10(n))
  ans1 = int(a) //最左边的数

对于最右边的数,比较好算,n^n按我们手动计算过程当中可以发现,每次的结果的最后一位只和上次结果的最后一位有关,所以直接来个快速幂,不断对10取余就行。