社区讨论

自己运行测试点是对的,交上去全WA

P1015[NOIP 1999 普及组] 回文数参与者 1已保存回复 0

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
0 条
当前快照
1 份
快照标识符
@mhj93fz3
此快照首次捕获于
2025/11/03 22:44
4 个月前
此快照最后确认于
2025/11/03 22:44
4 个月前
查看原帖
C
#include<stdio.h>
#include<string.h>
int check(char a) {//检查是不是字母
	if (a >= 48 && a <= 57) return 0;
	else return 1;
}
void trans(char* a,int n) {//把字符换成ascll码
	for (int i = 0; i < n; i++) {
		if (check(a[i]) == 1) a[i] -= 55;
		else a[i] -= '0';
	}
	return;
}
void add(char* res, char* num, char* change,int n,int x) {//完成加法存储
	int carryd = 0, carryg;
	for (int i = 0; i < n + 1; i++)
		res[i] = 0;
	for (int i = n-1; i >= 0; i--) {
		carryg = (num[i] + change[i]+carryd) / x;			
		res[n-1-i] = (num[i] + change[i] + carryd) % x;
		carryd = carryg;
	}
	if (carryd == 1) 
		res[n] = 1;
	return;
}
int answer(char* res,int n) {
	if (res[n] == 1) {
		for (int i = 0; i < n / 2; i++) 
			if (res[i] != res[n - i]) return 0;
		return 1;
	}
	else{
		for (int i = 0; i < n / 2; i++) 
			if (res[i] != res[n-1 - i]) return 0;
		return 1;
	}
}
void fan(char* num, char* change,int i) {
	for (int j = i - 1; j >= 0; j--)
		change[i - 1 - j] = num[j];
	return;
}
int main() {
	int x, i =0;
	scanf("%d", &x);
	getchar();
	char num[150]={0}, change[150]={0}, res[150], b;
	fgets(num, sizeof(num), stdin);
	i = strlen(num);
	num[i - 1] = 0;
	i--;
	trans(num, i);
	for (int j = 1; j <= 30; j++) {
		fan(num, change,i);
		add(res, num, change, i, x);
		if (answer(res, i) == 1) {
			printf("STEP=%d", j);
			return 0;
		}
		if (res[i] == 1) i++;
		fan(res, num, i);
	}
	printf("Impossible!");
	return 0;
}

回复

0 条回复,欢迎继续交流。

正在加载回复...