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

C 如何输入一个数字并按降序显示?,c,arrays,C,Arrays,我对C编程相当陌生 If the user enters a number lets say 123. How can i print out 321? 我尝试使用冒泡排序和选择排序,但我发现在这个初始阶段很难理解它们! 我希望有人能把它说出来,帮助我理解它! 请帮忙 谢谢你给你 #include <stdio.h> #include <string.h> int main() { int n ; int m ; int i, j, jMax

我对C编程相当陌生

If the user enters a number lets  say 123.
How can i print out 321?
我尝试使用冒泡排序和选择排序,但我发现在这个初始阶段很难理解它们! 我希望有人能把它说出来,帮助我理解它! 请帮忙 谢谢你

给你

#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
}
#包括
#包括
int main()
{
int n;
int m;
int i,j,jMax,max=0,res=0;
int len=0;
printf(“输入编号\n”);
scanf(“%d”和“&n”);
m=n;
do//计算包含输入编号的数组的长度
{
n/=10;
len++;
} 
而(n>0);
n=m;//复制回输入编号
int*arr=malloc(len*sizeof(int));//为数组分配内存
len=0;//初始化len以供循环使用
do//填充输入编号的数组
{ 
arr[len]=n%10;
n/=10;
len++;
} 
而(n>0);
//分类
int*sort=malloc(len*sizeof(int));
对于(i=0;i
您可以将用户输入作为字符串,并使用循环或递归以相反顺序打印字符串,但由于您是c新手,我想说的是,使用chux的解决方案

下面的代码既可以反转输入的号码,也可以按降序排列输入的号码。 您可以尝试以下代码:

    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;
    }
intmain()
{
int n,m,len,i,j,max=0,x;
printf(“输入数字”);
scanf(“%d”和“&n”);
m=n;
len=0;
printf(“顺序相反的数字”);
而(n>0)
{
n=n/10;
printf(“%d”,n%10));
len++;
}
printf(“\n”);
printf(“降序数字”);
int*num=malloc(len*sizeof(int));
i=0;
而(m>0)
{
num[i++]=m%10;
m=m/10;
}
/*可以使用任何排序技术对数组进行排序*/
对于(i=0;i
#包括
静态内联字符*max_c(大小,常量字符数组[size]){
const char*p=数组;

对于(inti=1;i来说,使用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 main(){
int num=123;
char-str[15];
字符向后[15];
int i,j=0;
sprintf(str,“%d”,num);
对于(i=strlen(str)-1;i>=0;i--){
向后[j++]=str[i];
}
向后[j]='\0';
printf(“%s\n”,向后);
返回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);
//如果您使用atoi,请记住包含此内容
#包括
//然后在将字符串反转为
//将其转换回int类型
num=原子(&向后);

如果你在上面搜索它们,它们会有一些非常好的视觉效果。向下滚动到可以看到按相应算法排序的数字的位置。
do{printf(“%d”,n%10);n/=10;}while(n>0);
是否要以不同的方式处理输入“023”和“23”听起来你想对数字进行排序,不是数字。我看到一个数字,而是三个数字。
//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);