阿里云网站空间做商城流程,重庆森林电影,网站配色风格有哪些,拖拽建设网站源码题目传送门
题目描述
若一个数#xff08;首位不为零#xff09;从左向右读与从右向左读都一样#xff0c;我们就将其称之为回文数。
例如#xff1a;给定一个十进制数 56#xff0c;将 56 加 65#xff08;即把 56 从右向左读#xff09;#xff0c;得到 121 是一个…题目传送门
题目描述
若一个数首位不为零从左向右读与从右向左读都一样我们就将其称之为回文数。
例如给定一个十进制数 56将 56 加 65即把 56 从右向左读得到 121 是一个回文数。
又如对于十进制数 87
STEP18778165 STEP2165561726 STEP37266271353 STEP4135335314884
在这里的一步是指进行了一次 N 进制的加法上例最少用了 4 步得到回文数 4884。
写一个程序给定一个 N2≤N≤10 或 N16进制数 M100 位之内求最少经过几步可以得到回文数。如果在 30 步以内包含 30 步不可能得到回文数则输出 Impossible!。
输入格式
两行分别是 NM。
输出格式
如果能在 30 步以内得到回文数输出格式形如 STEPans其中 ans 为最少得到回文数的步数。
否则输出 Impossible!。
输入输出样例
输入 #1
10
87输出 #1
STEP4 思路
既然是N进制数
请把高精加中的——%10改为%n
请把高精加中的——/10改为/n
其他运算方式不变
这题需要会高精加高精反转高精判断回文数和数组存高精度。
#includebits/stdc.h
using namespace std;
int n,q[1000001],l,w[1000001],s;
string m;
void t(int j)
{for(int im.size()-1;i0;i--){if(m[i]0m[i]9){q[j]m[i]-0;}else{q[j]m[i]-A10;}}
}
void d(int a[105],int b[105])
{for(int i1;il;i){a[i]b[i];a[i1]a[i]/n;a[i]%n;}if(a[l1]0)l;
}
bool f(int a[105])
{int lnl,i1,jl;while(ln--){if(lnl/2){break;}if(a[i]!a[j]){return false;}i;j--;}return true;
}
void e(int a[105],int j)
{for(int il;i1;i--){w[j]a[i];}
}
int main()
{cinnm;t(0);lm.size();while(!f(q)){e(q,0);d(q,w);s;if(s30){break;}}if(s30){coutImpossible!;}else{coutSTEPs;}return 0;
} 如有错误欢迎大家评论区指出感谢