1. 程式人生 > 遊戲 >《英雄連3》的敘事重點在美英之間的“競爭”上

《英雄連3》的敘事重點在美英之間的“競爭”上

迴文數

 1 #include<iostream>
 2 #include<cstring>
 3 #include<cctype>
 4 
 5 using namespace std;
 6 const int N=1005;
 7 
 8 bool isPalindrome(int a[]){
 9     for(int i=1;i<=a[0]/2;i++){
10         if(a[i]!=a[a[0]-i+1])return 0;
11     }
12     return 1;
13 }
14 int main(){
15     int n,m[N];
16 char str[N]; 17 cin>>n>>str; 18 //初始化資料 19 memset(m,0,sizeof(m)); 20 m[0]=strlen(str); 21 for(int i=1;i<=m[0];i++){ 22 //注意16進位制 23 char c=str[m[0]-i]; 24 if(isdigit(c)){ 25 m[i]=c-48; 26 } 27 else if(islower(c)){ 28
m[i]=c-'a'+10; 29 }else{ 30 m[i]=c-'A'+10; 31 } 32 } 33 //核心演算法 34 int i=0; 35 while(++i<=30){ 36 int carry=0; 37 for(int j=1;j<=m[0];j++){ 38 if(j<=m[0]/2){ 39 m[j]+=m[m[0]-j+1]; 40 }else if
(m[0]%2&&j==m[0]/2+1){ 41 m[j]*=2; 42 }else{ 43 m[j]=m[m[0]-j+1]; 44 } 45 } 46 for(int j=1;j<=m[0];j++){ 47 int tmp=m[j]+carry; 48 m[j]=tmp%n; 49 carry=tmp/n; 50 } 51 if(carry){ 52 m[0]++; 53 m[m[0]]=carry; 54 } 55 if(isPalindrome(m))break; 56 } 57 58 if(i>30)cout<<"Impossible"; 59 else{ 60 cout<<i; 61 } 62 return 0; 63 } 64 //接收N和M 65 //將N進位制化為10進位制(不化也行) 66 //迴圈相加 67 //每次相加後對結果判斷是否為迴文數