社区讨论
自己运行测试点是对的,交上去全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 条回复,欢迎继续交流。
正在加载回复...