进行重新组合得到最大的数,只需要将这些数字(各个位上的数)进行从大到小排序,然后放放到各个位上即可,实际上此时只要将排序后的数存放在数组中,然后进行简单的数组元素输出,因为在不用空格符区分开各数组元素时,我们看到的就是重新组合后所得的最大数,而能输入的最大自然数又取决于计算机的字长,一般的是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>
思想很简单,就是没什么思想,硬要说一个的话,就是筒排吧。
程序代码:
#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<conio.h>,这个是不是调用 画图函数的意思?
----------------解决方案--------------------------------------------------------
我觉得他的方法很好,简单.高效.
我刚开到这个题目的时候也是这样的想法.只是我在最后重新组织了这个数.他的要更简单,而且符合输出要求.
----------------解决方案--------------------------------------------------------