回文数

回文数

 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     //每次相加后对结果判断是否为回文数

 

回文数

上一篇:leetcode 987 二叉树的垂序遍历


下一篇:几种常见的卷积神经网络结构