【问题标题】:How to iterate through a given integer input, and give output of Largest to Smallest digits?如何遍历给定的整数输入,并给出最大到最小数字的输出?
【发布时间】:2015-05-18 21:39:18
【问题描述】:

理论上,我知道如何解决这个问题。

例如,如果给定的输入是 9536,那么输出就是 9653。

我想要一种方法来使用连接,并循环遍历每个数字,当找到一个大于其余数字的数字时,它将作为第一个“字符”存储在空字符串 r 中。

我能够使用 php(我的主要语言)解决这个问题,但不是 C。我正在准备一个实验室职位,这个实验室使用 C 作为他们的主要语言,所以我正在努力复习我的基本 C 技能.

感谢您的帮助

【问题讨论】:

  • 有一个非常简洁的解决方案,它涉及使用 10 元素的数字计数数组并使用 % 10/ 10 提取/删除数字(假设输入是数字而不是字符串) .我想这与您的要求并不相符。
  • 作为对数字进行排序的替代方法,您可以创建一个由数字 0 到 9 索引的直方图(出现次数),然后从直方图的最后一个条目开始(对于数字 9),对于索引 i 处的每个非零计数,输出那么多数字。

标签: c loops syntax concatenation


【解决方案1】:

三个步骤:

  1. 一次读取输入一个字符,将字符转换为整数并存储在整数数组中。
  2. 排序数组
  3. 打印(现已排序的)数组中的每个数字

【讨论】:

  • C 中的char 类型是整数类型,所以真的不需要转换/转换它。您可以直接比较字符。
【解决方案2】:

使用提供的qsort() 很容易进行排序。在这个例子中,我可以直接要求输入字符串,但你需要一个整数。它没有使用您想要的“连接”,但您没有显示任何代码。

    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>

    int compare(const void *A, const void *B) {
        return *(char*)B - *(char*)A;
    }

    int main() {
        int number;
        char numstr[21];
        printf("Enter an integer: ");
        if (scanf("%d", &number) != 1)
            return 1;
        sprintf (numstr,"%d", number);
        qsort(numstr, strlen(numstr), 1, compare);
        printf("%s\n", numstr);
    return 0;
    }

程序输出:

Enter an integer: 9536
9653

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-03-05
    • 2019-03-18
    • 2018-07-02
    • 1970-01-01
    • 1970-01-01
    • 2020-04-11
    • 1970-01-01
    相关资源
    最近更新 更多