為避免 TLE,因此先建次方表
下面 value 的計算為 第 i 位數的位數次方 - 第 i 位數的 10 進位值
例如
5 3134
value = 0
value += 3^4 - 3*5^3
value += 1^4 - 1*5^2
value += 3^4 - 3*5^1
value += 4^4 - 4*5^0
=> value = 0 所以輸出 YES
#include <iostream>
#include <cstring>
using namespace std;
int table[11][9];
void set_Exptable(){
int i, j;
for(i = 0; i<=10; i++)
table[i][0] = 1;
for(i = 0; i<=10; i++)
for(j = 1; j<9; j++)
table[i][j] = table[i][j-1] * i;
}
int main()
{
char num[8], digit;
int base, value;
int i;
set_Exptable();
while(cin >> base >> num){
digit = strlen(num);
for(i = value = 0; i < digit; i++){
num[i] -= '0';
value += table[num[i]][digit] - num[i] * table[base][digit-i-1];
}
if(value)
cout << "NO\n";
else
cout << "YES\n";
}
}
留言列表