章丘网站建设哪家好,斗门网站建设,西宁网站seo价格,官方网站欣赏题目描述
若一个数#xff08;首位不为零#xff09;从左向右读与从右向左读都一样#xff0c;我们就将其称之为回文数。
例如#xff1a;给定一个十进制数 5656#xff0c;将 5656 加 6565#xff08;即把 5656 从右向左读#xff09;#xff0c;得到 121121 是一个…题目描述
若一个数首位不为零从左向右读与从右向左读都一样我们就将其称之为回文数。
例如给定一个十进制数 5656将 5656 加 6565即把 5656 从右向左读得到 121121 是一个回文数。
又如对于十进制数 8787
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
这题用add函数负责将当前数与它的反向读取数相加并更新到 c[] 数组中同时处理进位情况和去除高位前导零。用pd函数判断当前数是否为回文数。用main
将字符转换为对应的数值存入 c [ ]
#include bits/stdc.h
using namespace std;
int n, a[305], len;
char c[305], d[305];void add() {for (int i 0; i len; i)d[len - i - 1] c[i];len2;for (int i 0; i len; i) {c[i] d[i];if (c[i] n) {c[i 1];c[i] - n;}}while (!c[len - 1])len--;
}
bool pd() {for (int i 0; i len; i) {if (c[i] ! c[len - 1 - i]) {return false;}}return true;
}int main() {cin n c;len strlen(c);for (int i 0; i len; i) {if (c[i] 0 c[i] 9)c[i] - 0;elsec[i] c[i] - A 10;}int step 0;while (!pd()) {step;if (step 30)break;add();}if (step 30)cout STEP step;elsecout Impossible!;return 0;
}