C语言:从键盘读入一个正整数(可能含有多个0),输出各个位组合形成的最小数。(输入890120,输出1289)

我是这么写的,先找出最小值,再把最小值化为0,再找除去0外的最小值,但是可能含有多个0,这个我不会处理~望大神指导~谢啦,重谢。#include<stdio.h>intm... 我是这么写的,先找出最小值,再把最小值化为0,再找除去0外的最小值,但是可能含有多个0,这个我不会处理~望大神指导~谢啦,重谢。
#include<stdio.h>
int main(void)
{
int a,b,c,min,n,minp,p=1,t=1,z=0;
scanf("%d",&a);
c=b=a;
while(a!=0)
{
a=a/10;
t=t*10;
}
t=t/10;
n=b%10;
min=n;
while (b!=0)
{
b=c;
for(;p<=t;p=p*10)
{
b=b/10;
n=b%10;
if (n<min)
{
min=n;
minp=p;
}
}
z=z+min*t;
t=t/10;
c=c-min*minp;
}
printf("%d\n",z);
return 0;
}
展开
 我来答
村驴0
2015-04-08 · TA获得超过456个赞
知道小有建树答主
回答量:223
采纳率:33%
帮助的人:87.2万
展开全部
#include<stdio.h>
#include<algorithm>   //排序函数使用 
#include<string.h>
using namespace std;
int main()
{
 int i;
 char s[1000]={0};
 scanf("%s",s);    //读入正整数 
 sort(s,s+strlen(s));   //为了方便,用了模板排序函数,也可以自己写 
 for(i=0;s[i];i++){
  if(s[i]=='0'){       //跳过前导零 
   continue;
  }
  printf("%c",s[i]);   //输出  
 }
 return 0;
}

不要一提到整数就用%d接收,像这类问题明显用字符串更方便一些

追问
……没学那些函数……表示都看不懂……不过好简单的样子,等我去查查~谢啦
追答
排序函数的话,目的就是把字符串中那些字符从小到大排序。用自己写的冒泡法也行。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
wchyumo2011
2015-04-08 · TA获得超过2万个赞
知道大有可为答主
回答量:5810
采纳率:79%
帮助的人:2699万
展开全部
给你提供一个思路:
直接统计这个数中0-9这是个数每个出现的次数,然后根据统计信息从1-9分别输出,比如1出现2次就输出2个1,3没有出现就不输出,如果最后没有输出大于0的数就输出一个0。
追问
恩,是个好方法~我没想到,可是统计次数不是还要用数组……
追答
可以不用数组啊,只是重复了九次遍历给定数中每个数位。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
空空2012xxy
2015-04-08 · TA获得超过432个赞
知道小有建树答主
回答量:612
采纳率:0%
帮助的人:616万
展开全部
。。。我来给你写一个吧
更多追问追答
追问
谢啦~别用数组~我们还没学那个~
追答
#include

int main(){
int i,n,ans=0;

scanf("%d",&n);

int a1=0,a2=0,a3=0,a4=0,a5=0,a6=0,a7=0,a8=0,a9=0,aa=0;

while(n){
switch(n%10){
case 1:a1++;aa++;break;
case 2:a2++;aa++;break;
case 3:a3++;aa++;break;
case 4:a4++;aa++;break;
case 5:a5++;aa++;break;
case 6:a6++;aa++;break;
case 7:a7++;aa++;break;
case 8:a8++;aa++;break;
case 9:a9++;aa++;break;
case 0:break;}
n/=10;}

for(i=0;i<a1;i++)printf("1");
for(i=0;i<a2;i++)printf("2");
for(i=0;i<a3;i++)printf("3");
for(i=0;i<a4;i++)printf("4");
for(i=0;i<a5;i++)printf("5");
for(i=0;i<a6;i++)printf("6");
for(i=0;i<a7;i++)printf("7");
for(i=0;i<a8;i++)printf("8");
for(i=0;i<a9;i++)printf("9");
if(aa==0)printf("0");

return 0;
}
/*BY TXJ*/
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式