c语言编程问题

发布于 2022-09-06 05:34:31 字数 53 浏览 31 评论 0

现有一道编程题,输出1993以内所有的对称数,用指针并用函数实现,没有思路,有没有好的方案?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

手长情犹 2022-09-13 05:34:31
#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);
}

答案非最优解,但思路是这样。

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文