咖啡


私信TA

用户名:Tianxn

访问量:138104

签 名:

十年OI一场空,不开LL见祖宗。

等  级
排  名 10
经  验 27291
参赛次数 10
文章发表 197
年  龄 22
在职情况 学生
学  校 西安电子科技大学
专  业 软件工程

  自我简介:

测试数据:

格式: 前两行输入,第三行输出。

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分

4 人评分

  评论区

答案可AC
2022-01-15 22:18:08
你的样例确定没问题吗,全部转成10进制手算看了看都是错误的。。
2020-07-18 17:47:23
这4个测试数据全对,还是20%错误??什么鬼
2020-02-19 23:23:12
  • «
  • 1
  • »