C/C++:计算N的N次方的个位数(火眼金睛找规律,解决此题数据问题)
生活随笔
收集整理的這篇文章主要介紹了
C/C++:计算N的N次方的个位数(火眼金睛找规律,解决此题数据问题)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
本題描述(源自杭電OJ):
本題分析:火眼金睛,“打表找規律”速解此題
我們都知道,此題本質上就是相同個位數字的不斷相乘。而相同個數數字不斷相乘的結果,其個位數字呈周期性變化。
以數字3為例,第一次33=9,第二次93=7,第三次73=1,第四次13=3,回到最開始的3,因此3的循環周期為4。同樣的,0~9都有其循環周期,我們只需要找到這個循環周期,后面一切都好辦。
具體怎么辦呢?看此時指數,如果指數%周期=x,那么在這個循環周期內的第x個數就是結果個位數。
舉個例子,1233的1233次,個位數字是3,周期剛才分析過了是4,1233%4=1,循環周期內的數分別是{3,9,7,1},第1個數字是3,因此1233的1233次的個位數就是3。
明白了這個原理,接下來我們具體講一講代碼如何實現!
代碼實現:
#include<bits/stdc++.h> //(源自杭電LCY入門算法課程) using namespace std; void solve() {int n;int a[10] = {1,1,4,4,2,1,1,4,4,2}; //對應數字0~9的循環周期長度 cin >> n;int ans = 1;int p = n % 10; //找到并存放N的個位數字于p n = n % a[p]; //用n存放結果是循環周期中的第幾個數 if (n == 0) //如果n=0,說明是循環周期中最后一個數,因此要加上循環周期長度 n += a[p];for (int i = 1; i <= n; i++) //具體第幾個數,就乘幾次初始個位數 ans = (ans * p) % 10;cout << ans << "\n"; } int main() {ios::sync_with_stdio(false); //取消同步流,提高cin效率 int t;cin >> t;while (t--){solve();}return 0; }總結
以上是生活随笔為你收集整理的C/C++:计算N的N次方的个位数(火眼金睛找规律,解决此题数据问题)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 数据结构--堆Heap
- 下一篇: s3c2440移植MQTT