1309:【例1.6】回文数(Noip1999)

简介: 1309:【例1.6】回文数(Noip1999)

1309:【例1.6】回文数(Noip1999)

时间限制: 1000 ms         内存限制: 65536 KB

【题目描述】

若一个数(首位不为零)从左向右读与从右向左读都是一样,我们就将其称之为回文数。例如:给定一个 10进制数 56,将 56加 65(即把56从右向左读),得到 121是一个回文数。又如,对于10进制数87,

STEP1: 87+78= 165 STEP2: 165+561= 726

STEP3: 726+627=1353 STEP4:1353+3531=4884

在这里的一步是指进行了一次N进制的加法,上例最少用了4步得到回文数4884。

写一个程序,给定一个N(2<N<=10或N=16)进制数 M.求最少经过几步可以得到回文数。如果在30步以内(包含30步)不可能得到回文数,则输出“Impossible” 。

【输入】

给定一个N(2<N<=10或N=16)进制数M。

【输出】

最少几步。如果在30步以内(包含30步)不可能得到回文数,则输出“Impossible”。

【输入样例】

9 87

【输出样例】

6

【来源】

No

1. #include <cstdio>
2. #include <cstring>
3. #include <iostream>
4. using namespace std;
5. int a[101],b[101],n,ans,i;
6. void init(int a[]){//读取字符串并逆序转换为数组 
7.  string s;
8.  cin>>n>>s;
9.  memset(a,0,sizeof(a));
10.   a[0]=s.length();
11.   for(i=1;i<=a[0];i++)
12.     if(s[a[0]-i]>='0'&&s[a[0]-i]<='9')  a[i]=s[a[0]-i]-'0';
13.     else a[i]=s[a[0]-i]-'A'+10;
14. } 
15. bool check(int a[]){//判断是否回文数 
16.   for(i=1;i<=a[0];i++)
17.     if(a[i]!=a[a[0]-i+1]) return false;
18.   return true;
19. } 
20. void jia(int a[]){//加法运算函数 
21.   int i,k;
22.   for(i=1;i<=a[0];i++) b[i]=a[a[0]-i+1];//逆序存储 
23.   for(i=1;i<=a[0];i++) a[i]+=b[i];//按位求和 
24.   for(i=1;i<=a[0];i++){//进位处理 
25.     a[i+1]+=+a[i]/n;
26.     a[i]%=n;
27.   }
28.   if(a[a[0]+1]>0) a[0]++;//修正长度 
29. } 
30. int main()
31. {
32.   init(a);
33.   if(check(a)){
34.     cout<<0<<endl;
35.     return 0;
36.   }
37.   ans=0;
38.   while(ans<=30){
39.     ans++;
40.     jia(a);
41.     if(check(a)){
42.       cout<<ans<<endl;
43.       return 0;
44.     }
45.   }
46.   cout<<"Impossible";
47.   return 0;
48.  }

 

相关文章
|
3月前
回文数
【1月更文挑战第20天】回文数。
13 0
|
3月前
|
人工智能 Java C++
分解质因数
分解质因数
17 1
|
9月前
AcWing 867. 分解质因数
AcWing 867. 分解质因数
|
4月前
分解质因数答疑
为什么n % i == 0就是质数 因为在枚举到i之前已经把n中2到i-1的质因子除干净了,此时n中不含2到i-1的质因子,由于n为i的倍数,所以i中也不包含2到i-1的质因子。如果i可以整除前面的i - 1中的数那么i = x * (i - 1),n = x2 * (x * (i - 1)); 矛盾了 为什么只需要枚举到根号N
25 2
|
7月前
[NOIP1998]拼数
[NOIP1998]拼数
|
9月前
1260:【例9.4】拦截导弹(Noip1999) 2021-01-15
1260:【例9.4】拦截导弹(Noip1999) 2021-01-15
|
10月前
leetcode:9.回文数
判断一个整数是否是回文数。回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数
29 1
每日一题——最大回文数乘积
每日一题——最大回文数乘积
77 0
P5705 【深基2.例7】数字反转
P5705 【深基2.例7】数字反转
96 0
|
C++
回文数(C++)
回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。是一个回文整数,返回。
169 0