我对C编程很新。
If the user enters a number lets say 123.
How can i print out 321?
我尝试使用气泡和选择排序,但我发现在这个初始阶段很难理解它们! 我希望有人可以通过打破它来帮助我理解它! 请帮忙 谢谢
答案 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);