#include
#include
#include
//** 声明结构
//** @result 返回对称数数组
//** @length 数组的长度
struct Symmetrical {
int *result;
int length;
};
typedef struct Symmetrical Symmetrical;
Symmetrical *findSymmetrical() {
//为结果分配内存,最大可能为所有数都是对称数,即 sizeof(int)*1993
int *result = (int *)malloc(sizeof(int)*1993);
int length = 0;
//数字转换为字符串后存放的数组
char *numStr = (char *)malloc(sizeof(char)*4);
for (int i = 1; i <= 1993; i++) {
//如果小于10,一定为对称数
if (i < 10) result[length++] = i;
else {
int is_symmetrical = 1;
// 转换数字到字符串,itoa是非标准函数,可以用sprintf代替
sprintf(numStr, "%d", i);
// itoa(i, numStr, 10);
int num_length = strlen(numStr);
//对每一位进行对比
for (int j = 0; j < num_length / 2; j++) {
//如果正数第j位和倒数第j位不一样,则不为对称数,结束循环
if (numStr[j] != numStr[num_length - j - 1]) {
is_symmetrical = 0;
break;
}
}
//如果是对称数,存到结果数组里
if (is_symmetrical) result[length++] = i;
}
}
free(numStr);
//创建对称数结构,用于同时传递数组和数组长度
Symmetrical *symmetrical = (Symmetrical *)malloc(sizeof(Symmetrical));
symmetrical->result = result;
symmetrical->length = length;
return symmetrical;
}
int main() {
Symmetrical *result = findSymmetrical();
//打印
for (int i = 0; i < result->length; i++) {
printf("%d ", result->result[i]);
}
free(result->result);
free(result);
}
答案非最优解,但思路是这样。