原题链接:回文数(二)
测试数据:
格式: 前两行输入,第三行输出。
2
10011
STEP=4
16
AC27
STEP=6
10
89
STEP=24
2
101111
Impossible!
我的代码如下,没有难理解的地方,大家自行看看。
参考代码:
#include <bits/stdc++.h>
using namespace std;
string text;
int k, ch[400], len;
// 回文判断
bool ok(int s[]) {
for(int i = 0; i < len / 2; ++i) {
if(s[i] != s[len - i - 1]) return false;
}
return true;
}
// 字符串转整数
void s2i(string s) {
for(int i = 0, len = s.size(); i < len; ++i) {
if(isdigit(s[i])) {
ch[i] = s[i] - '0';
} else {
ch[i] = s[i] - 55;
}
}
}
// 大数加法
void BigNumberAdd(int s[]) {
int tmp[400];
for(int i = len - 1, j = 0; i >= 0; --i, ++j) {
tmp[j] = s[i];
}
int t = 0;
for(int i = 0; i < len; ++i) {
int num = t + tmp[i] + s[i];
ch[i] = num % k;
t = num/ k;
}
while(t) {
ch[len++] = t % k;
t = t / k;
}
reverse(ch, ch + len);
}
int main() {
int step = 0;
cin >> k >> text;
len = text.size();
s2i(text);
while(1) {
if(ok(ch)) {
printf("STEP=%d\n", step);
return 0;
}
BigNumberAdd(ch);
if(step++ == 30) {
printf("Impossible!\n");
return 0;
}
}
return 0;
}0.0分
0 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复