开发者社区 问答 正文

一维数组{0,1,0,2,3},如何遍历数组并实现输出1,0,2,3和3,2,0,1?

原题是这样的:
输入一个五位以内(含五位)的正整数
(1)判断它是一个几位数;
(2)请按序输出其各位数字;
(3)逆序输出其各位数字。
要求:使用指针
如输入:56439,
输出:
五位数
5,6,4,3,9
9,3,4,6,5
我已经实现输入数据,判断位数,并将每一位存到一个数组中。因为事先不知道用户要输入几位,所以数组按照有可能输入的最大数来定义,即输入五位数,,定义一个长度为5的数组a[5],把每一位装进数组中。但是假如用户输入了小于5位数的,并且这个数的中间有某一位是0,比如1004,那么这个时候数组各元素为{0,1,0,0,4},我的问题是:如何能按照题意,输出1,0,0,4 和4,0,0,1 ?

下面是我的代码段:

#include <stdio.h>

int main(int argc, const char * argv[]) {

    unsigned long n = 0;

    //输入一个数

    while (1) {

        printf("Input a number(0~9999): \n");

        scanf("%lu", &n);

        if (n > 0 && n < 100000) {

            break;
        }
    }

    //判断是几位数
    //每一位存入数组
    int i = 0;

    int a[5] = {0};

    int *p = &a[4];

    while (n != 0) {

        *p = n % 10;

        n /= 10;

        i++;
        p--;
    }

    printf("\ndigit:%d\n\n",i);

    //遍历数组,输出元素
    for (int i = 0; i < 5; i++) {

        printf("%d ", a[i]);
    }

    printf("\n");

    //倒序输出元素
    for (int i = 4; i >= 0; i--) {

        printf("%d ", a[i]);

    }

    printf("\n");

    return 0;
}

展开
收起
a123456678 2016-06-07 21:07:04 3207 分享 版权
1 条回答
写回答
取消 提交回答
  • 题主已经将1004解析成了{0, 1, 0, 0, 4}数组,然后遇到的问题是第一个占位的0(其实代表没有该位)与后面的有效0(该位上的数据为0)无法区分。题主只需将占位符换成一个其他的唯一含义字符便可消除0的二义性了。比如

    // 用PLACEHOLDER填充数组,输出时过滤掉PLACEHOLDER位
    #define PLACEHOLDER    0xff
    2019-07-17 19:31:02
    赞同 展开评论
问答分类:
问答地址: