#include <stdio.h> #include <stdlib.h> #include <string.h> //** 声明结构 //** @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); } 答案非最优解,但思路是这样。
答案非最优解,但思路是这样。