w22116972
3/28/2014 - 4:28 PM

UVA 10162

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;
}