uva 10515——Powers Et Al.
生活随笔
收集整理的這篇文章主要介紹了
uva 10515——Powers Et Al.
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
題意:這個題目題中的圖片已經給的夠清楚了,就算不怎么讀題,也能yy大概的意思,況且題目也很短,很容易都出來就是給定 a,b,然后求a^b的個位數!
思路:開始想到了同余模,可是沒有往深處想,發現只用同余模和快速冪是無法解決的,一是因為數太大,二是算出來的數也無法保存,胡思亂想想到用double,什么long? double都搞出來了,不過越搞越復雜,反而陷入思維深淵!后來想到底數要保留到最后一位,但是不知道怎么使指數降下來,后來看了題解,才明白個位數的指數次都是以1,2,4,作為循環,這就好辦了,直接%4,就能對指數精簡化了!后面至于用快速冪,打表,或者pow已經不是重點了,因為都能算出來了!
code:
#include <iostream> #include <cstdio> #include <cmath> #include <string> #include <cstring> #include <algorithm> using namespace std;int cal(string n) //化指數為2位數 {if (n.size()==1) return n[0]-'0';int t=n[n.size()-1]-'0';t=t+(n[n.size()-2]-'0')*10;t%=4;if (t==0) t=4;return t; } int sol(int a,int b) //一位數的2位數次冪,也可pow,快速冪,打表 {int t=1;for (int i=0;i<b;i++)t*=a,t%=10;t%=10;return t; } int main() {string m,n;while (cin>>m>>n){if (m=="0"&&n=="0") break;int a=m[m.size()-1]-'0'; //只取末尾一位int b=cal(n);printf("%d\n",sol(a,b));} }
思路:開始想到了同余模,可是沒有往深處想,發現只用同余模和快速冪是無法解決的,一是因為數太大,二是算出來的數也無法保存,胡思亂想想到用double,什么long? double都搞出來了,不過越搞越復雜,反而陷入思維深淵!后來想到底數要保留到最后一位,但是不知道怎么使指數降下來,后來看了題解,才明白個位數的指數次都是以1,2,4,作為循環,這就好辦了,直接%4,就能對指數精簡化了!后面至于用快速冪,打表,或者pow已經不是重點了,因為都能算出來了!
code:
#include <iostream> #include <cstdio> #include <cmath> #include <string> #include <cstring> #include <algorithm> using namespace std;int cal(string n) //化指數為2位數 {if (n.size()==1) return n[0]-'0';int t=n[n.size()-1]-'0';t=t+(n[n.size()-2]-'0')*10;t%=4;if (t==0) t=4;return t; } int sol(int a,int b) //一位數的2位數次冪,也可pow,快速冪,打表 {int t=1;for (int i=0;i<b;i++)t*=a,t%=10;t%=10;return t; } int main() {string m,n;while (cin>>m>>n){if (m=="0"&&n=="0") break;int a=m[m.size()-1]-'0'; //只取末尾一位int b=cal(n);printf("%d\n",sol(a,b));} }
總結
以上是生活随笔為你收集整理的uva 10515——Powers Et Al.的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java注解@Interface与Ann
- 下一篇: uva 10622——Perfect