当前位置: 代码迷 >> C语言 >> [求助]求各位数字组成的最大数
  详细解决方案

[求助]求各位数字组成的最大数

热度:430   发布时间:2007-05-14 21:56:05.0
我想请问楼上这位:从理论上说,将一个自然数输入计算机中后,将这个自然数上各个位上的数
进行重新组合得到最大的数,只需要将这些数字(各个位上的数)进行从大到小排序,然后放放到各个位上即可,实际上此时只要将排序后的数存放在数组中,然后进行简单的数组元素输出,因为在不用空格符区分开各数组元素时,我们看到的就是重新组合后所得的最大数,而能输入的最大自然数又取决于计算机的字长,一般的是32位的,也就是最大是:2的32次方减1为:4294967295(unsigned long),也就是说,不管怎样,我们能解决的也只是4294967295以内的自然数问题,那么有没有其他办法解决这个问题使得所输入的自然数不受cpu字长限制呢?
----------------解决方案--------------------------------------------------------
我有个比较菜的想法
就是定义个长度为1000或者多少的字符型数组
然后直接用排序
楼上总不会要无穷长度吧,感觉无穷那就失去了程序所需要的有穷性了

----------------解决方案--------------------------------------------------------
我觉得还可这样:
我们把输入的整数当成字符串输入,那么就解决了整数不能表示的毛病。
然后我们用一个指针指向这个字符串,之后就按降序排列就 行了。我估计这个算法应该可以的。。。
----------------解决方案--------------------------------------------------------
回复:(pinglideyu)我觉得还可这样:我们把输入的整...
好像应该可以那么做,不过可能不是LZ要的那种吧
----------------解决方案--------------------------------------------------------
以下是引用leeco在2007-5-14 21:18:58的发言:

程序代码:

#include<stdio.h>
#include<math.h>

int digit[10],n,i;

int main()
{
scanf(\"%d\",&n);
do{
digit[n%10]++;
n/=10;
}while(n);

i=9;
while(i>=0){
if(digit[i]){
digit[i]--;
printf(\"%d\",i);
}
else{
i--;
}
}
printf(\"\n\");
}


思想很简单,就是没什么思想,硬要说一个的话,就是筒排吧。

干脆输入的时候就用char s[10]还简单一些


----------------解决方案--------------------------------------------------------
用字符串 这样不管你输入多大的数
都行 比较大小也简单
不用去分离
----------------解决方案--------------------------------------------------------
我在下面试一下
----------------解决方案--------------------------------------------------------
#include&lt;conio.h&gt;,这个是不是调用 画图函数的意思?
----------------解决方案--------------------------------------------------------
我觉得他的方法很好,简单.高效.
我刚开到这个题目的时候也是这样的想法.只是我在最后重新组织了这个数.他的要更简单,而且符合输出要求.
----------------解决方案--------------------------------------------------------
  相关解决方案