UVA 10162
#include <iostream>
#include <cstring>
#include <string>
using namespace std;
string bigN;
int rule[101];
int nPowerofN(int n){ // 計算某n的n次方
int ans=1;
for (int i=1; i<=n; i++) {
ans*=n;
ans%=10;
}
return ans;
}
int sumofPowerofN(int n){ // 到某n為止的所有次方和
int ans=0;
for (int i=1; i<=n; i++) {
ans+=nPowerofN(i);
ans%=10;
}
return ans;
}
void setRule(){ // 因為有100個循環,所以建100個即可
rule[0]=0;
for (int i=1; i<=100; i++)
rule[i]=sumofPowerofN(i);
}
int main(int argc, const char * argv[])
{
setRule();
while ( cin >> bigN && bigN!="0") {
int num=0;
int len=int(bigN.length()); // 協助判斷十位
//int dig1=stoi(&bigN[len-1]);
int dig1=bigN[len-1]-'0'; // 最大的問題在這,用上一行的函式去轉換成整數會有問題
if (len>1) { // ex.9 -> 99 而不是 9
// int dig2=stoi(&bigN[len-2]); // 這裡也是
int dig2=bigN[len-2]-'0'; // 所以只好使用此行 最基本的轉換整數方法
num+=(dig2*10); // 把十位數考慮進來
}
num+=dig1;
cout << rule[num] <<endl; // 直接查表
}
return 0;
}