C 如何输入一个数字并按降序显示?
我对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
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);