排序整数的数字

wha*_*cko 11 c c++

给你一个整数51234(比方说)我们需要对输出数字的数字进行排序12345.

不使用数组怎么做?

Car*_*rez 28

您可以使用循环并% 10提取每个数字.从0到9的外部循环可用于测试数字是否存在.如果存在,请将其打印出来.

在伪代码中:

n = integer // 51234
FOR digit = 0 TO 9
  temp = n
  REPEAT
    IF temp % 10 = digit THEN PRINT digit
    temp /= 10
  UNTIL temp = 0
Run Code Online (Sandbox Code Playgroud)

编辑: gcc中的此测试显示它处理零和重复数字:

$ cat sortdigits.c
#include <stdio.h>
main () {
 int n,digit,temp;
 n = 43042025;
 for (digit=0;digit<9;digit++)
   for (temp=n;temp>0;temp/=10)
     if (temp%10==digit) printf("%d",digit);
 printf("\n");
}
$ ./sortdigits
00223445
Run Code Online (Sandbox Code Playgroud)

  • @ Adam Badura:为什么不呢?这也会给出正确的输出. (2认同)

Dan*_*Dan 6

// Bubblesort
long sortNum(long n) {
  while (true) {
    long a = n % 10, p = 9;
    bool s = false;
    for (long r = n / 10; r; r/= 10) {
      long b = r % 10;
      if (a < b) {
        n -= p * (b - a);
        s = true;
      } else a = b;
      p *= 10;
    }
    if (!s) return n;
  }
}

#include <iostream>

int main(int argc, char **argv) {
  if (argc > 1) {
    long n = strtol(argv[1], 0, 0);
    std::cout << "Unsorted: " << n << std::endl;
    n = sortNum(n);
    std::cout << "Sorted:   " << n << std::endl;
  }
  return 0;
}

$ g++ -Wall -Wextra bubble-int.cpp && ./a.exe 183974425
Unsorted: 183974425
Sorted:   123445789
Run Code Online (Sandbox Code Playgroud)


小智 5

您根本不需要编写程序,只需使用 shell 命令即可:

echo "51234" | sed 's+\(.\)+\1\n+g' | sort | tr -d '\n'
Run Code Online (Sandbox Code Playgroud)