问题描述
- 用c语言写 一个任意整数的降序数
-
#include
#include
int main(void)
{int j,n;
int i=0;
int a[10];
printf("请输入一个整数: ");
scanf("%d", &n);
while (n > 0)
{
a[i] = n % 10;n = n / 10;
i++;
}
for (i=0; i<10;i++)
for (j=0;j<10-i-1;j++)
{if (a[j] < a[j+1])
{int t=a[j];
a[j]= a[j+1];
a[j+1] = t;
}
}
for(i=0;i<10;i++)
printf("%d ",a[i]);
}当输入的数不足10位时,不足的位会出现-858993460
解决方案
其实就是因为你没有把数组的后三位给填满,造成的,
你先把这个数组每一位初始化都为0,这样你位数不到10位时候,后面的位数不为null,都为0 ,他就会自动进行排序了
解决方案二:
告诉你一个最简单的方法,不要按照整数接收,直接按照字符串接收,让后strlen得到长度,之后直接对比排序打印就可以了。
你这个的原因就是楼上的说法,他的方法你只要在定义数组的时候改成 a[10] = {0};就可以了。原因是在栈中分配的内存是不会自动清零的。
解决方案三:
一个求任意整数降序数的程序
求任意整数降序数
求整数的降序数
解决方案四:
#include<stdio.h>
#include <stdlib.h>
int n,i,j,length;
char *strs;
int len(n){
int length = 0;
while(n>0) {
n=n/10;
length++;
}
// printf("the nubmer is:%d
",length);
return length;
}
int sort(strs,length){
char *str = strs;
str[1] = 0;
while (n > 0) {
str[i] = n % 10;
n = n / 10;
i++;
}
for (i=0; i<length;i++)
for (j=0;j<length-i-1;j++) {
if (str[j] < str[j+1]) {
int t=str[j];
str[j]= str[j+1];
str[j+1] = t;
}
}
return 0;
}
int main(){
// int len();
int lens = 0;
printf("请输入一个整数: ");
scanf("%d", &n);
lens = len(n);
// printf("%d",lens);
printf("
");
strs=(char*)malloc(length*sizeof(char));
if (NULL == strs)
exit (1);
sort(strs,lens);
for(i=0;i<lens;i++)
printf("%d ",strs[i]);
printf("
");
return 0;
}
时间: 2024-08-07 15:17:41