如何输入数字并按降序显示?

时间:2014-08-05 01:10:13

标签: c arrays

我对C编程很新。

If the user enters a number lets  say 123.
How can i print out 321?

我尝试使用气泡和选择排序,但我发现在这个初始阶段很难理解它们! 我希望有人可以通过打破它来帮助我理解它! 请帮忙 谢谢

5 个答案:

答案 0 :(得分:0)

你走了!

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

int main()
{
    int n ;
    int m ;
    int i, j, jMax, max=0, res = 0;

    int len = 0;

    printf("Input number\n");
    scanf("%d", &n);
    m = n;
    do // compute length of array that contains our input number
    {
        n /= 10;
        len++;
    } 
    while (n > 0);


    n = m;  // copy back input number
    int * arr = malloc(len*sizeof(int)); // allocate memory for the array
    len = 0; // initialize len for loop use

    do  // fill the array of input number
    { 
        arr[len] = n%10;
        n/=10;
        len++;
    } 
    while (n > 0);

    //sort
    int * sort = malloc(len*sizeof(int));
    for(i = 0; i< len; i++)
    {
        for(j = 0; j<len; j++)
        {
            if(arr[j] > max)
                {max = arr[j]; jMax = j;}
        }
        arr[jMax] = 0;
        sort[i] = max;
        max = 0;
    }

    // convert back from array to an int
    j = 1; 
    for (i=0; i< len; i++) 
    {
        res += sort[len-i-1]*j;
        j *= 10;
    }
    printf("   %d", res);

    return 0
}

答案 1 :(得分:0)

您可以将用户输入作为字符串,并使用循环或递归以相反的顺序打印字符串,但是因为您不熟悉c,我会说,请使用chux的解决方案。

答案 2 :(得分:0)

以下代码同时反转输入的数字以及按降序排列输入的数字。 您可以尝试以下代码:

    int main()
    {
       int n,m,len,i,j,max=0,x;
       printf("Enter the number\n");
       scanf("%d",&n);

       m = n;
       len = 0;
       printf("Number in the reverse order\n");
       while(n>0)
       {
          n=n/10;
          printf("%d",(n%10));
          len++;
       }

       printf("\n");
       printf("Numbers in descending order\n");

    int *num = malloc(len*sizeof(int));
      i =0;
       while(m>0)
       {
          num[i++] = m%10;
          m= m/10;
       }
    /* Any sorting technique can be used to sort the array */
       for(i=0;i<len;i++)
       {
          max = num[i];
          x = i;
          for(j=i+1;j<len;j++)
          {
             if(num[j] > max)
             {
                max = num[j];
                x = j;
             }
          }
          num[x] = num[i];
          num[i]= max;
       }

/* Priting the entered number in descending order */
       for(i=0;i<len;i++)
          printf("%d",num[i]);

       printf("\n");
       return 0;
    }

答案 3 :(得分:0)

#include <stdio.h>

static inline char *max_c(size_t size, const char array[size]){
    const char *p = array;
    for(int i=1;i<size;++i){
        if((unsigned char)*p < array[i])
            p = array + i;
    }
    return (char*)p;
}

static inline void swap(char *a, char *b){
    char tmp = *a;
    *a = *b;
    *b = tmp;
}

int main(void) {
    char digits[32];
    int len;
    printf("input nums : ");
    scanf("%31[0-9]%n", digits, &len);
    for(int i = 0; i<len-1 ; ++i){
        //swaped with the first element to select an element of maximum
        swap(max_c(len - i, digits + i), &digits[i]);
    }
    printf("%s\n", digits);
    return 0;
}

答案 4 :(得分:0)

使用sprintf将int转换为字符串然后反转字符串可能是最简单的。

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

int main(){
   int num = 123;
   char str[15];
   char backwards[15];
   int i, j = 0;

   sprintf(str,"%d",num);

   for(i = strlen(str) - 1; i >= 0; i--){
      backwards[j++] = str[i];
   }
   backwards[j] = '\0';

   printf("%s\n",backwards);

   return 0;

}

然后,如果你需要把它变回一个int,那么使用atoi就可以了。

//Remember to include this if you use atoi
#include <stdlib.h>

//Then just use this after you have reversed the string to
//convert it back to type int
num = atoi(&backwards);