#include <stdio.h>
#include <stdlib.h> //使用itoa,将一整型数转化成字符串
#include <string.h>
#include <math.h>
int main()
{
const int ARRAY_SIZE = 20;
int value,length,max,min;
char buffer[ARRAY_SIZE];
int num[ARRAY_SIZE];
printf("Please enter one number:");
scanf("%d",&value);
length = strlen(itoa(value,buffer,10));
for(int i=length-1; i>=0; i--)
{
num[i] = value / (int)pow(10,i);
value = value % (int)pow(10,i);
printf("%d\t",num[i]);
}
printf("\n");
max = num[0];
min = num[0];
for(i=length-1; i>0; i--)
{
if(max < num[i])
max = num[i];
if(min > num[i])
min = num[i];
}
printf("THe min number is: %d\nThe max number is: %d\n",min,max);
return 0;
}
----------------解决方案--------------------------------------------------------
LZ```要知道你输入的一个整数```有多少位不知道````
如果从键盘输入```你又何必去想``怎么拆开它呢````
使用``getchar( )``不就等于把数拆开了吗````
然后你要做什么操作就不知道````有需要```你可以 getchar()-'48' ```
如果是用函数的功能实现``那么上面的办法肯定就不能用了``
我提供的方法是 一个循环``` n是要拆的数p指向一个数组```
void chaishu ( long n , int *p )
{
while ( n )
{
*p++ = n%10 ;
n /= 10 ;
}
return ;
}
----------------解决方案--------------------------------------------------------
楼上的那位,你上面的程序是否看懂了啊....?程序能处理任意长度的整形数....如果要用函数封装,你的那个办法可行么...函数需要的参数是一个整数哦...你那样可以么....
以上是本人的看法...
----------------解决方案--------------------------------------------------------
汗了
while(num)
{
data[num%10]++;
num/=10;
}
然后要最大的则从9开始循环,要最小则从1开始循环(记得从1开始得到一个数后要回到0处循环)
比如
0 1 2 3 4 5..
2 0 3 0 1..
得到的结果是200224..
----------------解决方案--------------------------------------------------------
不用那么复杂哟
要每一位的数字吧
int main()
{
int i=0
char a[100]={0};
gets(a);
while(a[i++]);
i-=2;
//a[0]就是最高位 a[i]就是个位
return 0;
}
----------------解决方案--------------------------------------------------------
看热闹
----------------解决方案--------------------------------------------------------
实验了N天,今天终于有了灵感,搞定了。大家看看我的程序,给点意见,谢谢大家.
#include <stdio.h>
#include <string.h>
main ()
{
char num[11] ,temp ; //定义一个数组存储输入的数字,这样方便取得数字长度
short i, j, a, a2 ;
scanf("%s",num);
a=strlen(num); //用一个函数求得数字(字符串)长度,方便下面循环使用
a2=a-1; //用于排序
for (i=1; i<a; i++) //我只会用冒泡法排序,在这里用这个方法排序(不过据说冒泡法是最笨的)
{
for (j=0; j<=a2-i; j++)
{
if (num[j] > num[j+1])
{
temp=num[j]; num[j]=num[j+1]; num[j+1]=temp;
}
}
}
for (i=0; i<a; i++) //输出最小数
{
printf("%c",num[i]);
}
printf("\n");
for (i=a2; i>=0; i--) //输出最大数
{
printf("%c",num[i]);
}
printf("\n");
}
----------------解决方案--------------------------------------------------------
下午别人指点说,求最大数不用排序,所以又有一招,程序如下,请再指点,谢谢。
#include <stdio.h>
#include <string.h>
main ()
{
char num[11] ; //定义一个数组存储输入的数字,这样方便取得数字长度
short a, i, max, min;
scanf("%s",num);
a=strlen(num); //用一个函数求得数字长度,方便下面循环使用
for (i=0; i<a; i++) //打印最大数
{
max=(num[i]>num[i+1]) ? num[i] : num[i+1];
printf("%d",max);
}
printf("\n");
for (i=0; i<a; i++) //打印最小数
{
min=(num[i]<num[i+1]) ? num[i] : num[i+1];
printf("%d",min);
}
printf("\n");
}
----------------解决方案--------------------------------------------------------
应该要排序哦 你那只能输出每2个数间的最大或最小数值啊
[[italic] 本帖最后由 叶柄 于 2007-12-8 20:35 编辑 [/italic]]
----------------解决方案--------------------------------------------------------
任意位数 (前提是你的内存够用...)
#include <stdio.h>#include<stdlib.h>
typedef struct nod
{
char ch;
struct nod *next;
}linklist;
void main (void)
{
int count=0,i=0,j=0;//位数
char ch,*newch,temp;
linklist *head,*p,*rear;
head=NULL;
rear=head;
p=head;
scanf("%c",&ch);
while(ch>47&&ch<58)//输入
{
count++;//计数
if(NULL==head)
{
p=(linklist*)malloc(sizeof(linklist));
p->ch=ch;
head=p;
head->next=NULL;
rear=head;
}
else
{
p=malloc(sizeof(linklist));
p->ch=ch;
rear->next=p;
rear=p;
rear->next=NULL;
}
scanf("%c",&ch);
}
rear=head;
newch=calloc(count+1,sizeof(char));//链表排序没用过 呵呵 转化为数组
for(i=0;i<count;i++)
{
p=rear;
newch[i]=rear->ch;
rear=rear->next;
free(p);
}
newch[count]='\0';
for(i=0;i<count;i++) //冒泡
{
for (j=0; j<count-i; j++)
{
if (newch[j] > newch[j+1])
{
temp=newch[j];
newch[j]=newch[j+1];
newch[j+1]=temp;
}
}
}
for (i=0; i<count; i++) //输出最小数
{
printf("%c",newch[i+1]);
}
printf("\n");
for (i=count-1; i>=0; i--) //输出最大数
{
printf("%c",newch[i+1]);
}
printf("\n");
}
[[italic] 本帖最后由 叶柄 于 2007-12-9 13:17 编辑 [/italic]]
----------------解决方案--------------------------------------------------------