在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 問答/C  C++/ c語言編程問題

c語言編程問題

現(xiàn)有一道編程題,輸出1993以內(nèi)所有的對稱數(shù),用指針并用函數(shù)實現(xiàn),沒有思路,有沒有好的方案?

回答
編輯回答
野橘
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

//** 聲明結構
//** @result 返回對稱數(shù)數(shù)組
//** @length 數(shù)組的長度
struct Symmetrical {
    int *result;
    int length;
};

typedef struct Symmetrical Symmetrical;

Symmetrical *findSymmetrical() {
    //為結果分配內(nèi)存,最大可能為所有數(shù)都是對稱數(shù),即 sizeof(int)*1993
    int *result = (int *)malloc(sizeof(int)*1993);
    int length = 0;
    //數(shù)字轉換為字符串后存放的數(shù)組
    char *numStr = (char *)malloc(sizeof(char)*4);
    
    for (int i = 1; i <= 1993; i++) {
        //如果小于10,一定為對稱數(shù)
        if (i < 10) result[length++] = i;
        else {
            int is_symmetrical = 1;
            // 轉換數(shù)字到字符串,itoa是非標準函數(shù),可以用sprintf代替
            sprintf(numStr, "%d", i);
            // itoa(i, numStr, 10);
            int num_length = strlen(numStr);
            //對每一位進行對比
            for (int j = 0; j < num_length / 2; j++) {
                //如果正數(shù)第j位和倒數(shù)第j位不一樣,則不為對稱數(shù),結束循環(huán)
                if (numStr[j] != numStr[num_length - j - 1]) {
                    is_symmetrical = 0;
                    break;
                }
            }
            
            //如果是對稱數(shù),存到結果數(shù)組里
            if (is_symmetrical) result[length++] = i;
        }
    }
    free(numStr);
    
    //創(chuàng)建對稱數(shù)結構,用于同時傳遞數(shù)組和數(shù)組長度
    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);
}

答案非最優(yōu)解,但思路是這樣。

2018年7月21日 20:57