找错,编译通过

linruixin01 2010-10-04 03:39:50
VC6.0编译通过
代码作用,对N整数进行排列,组成最大的整数
123 4 5 6组成 654123
如果整数位数<=2则输出结果是正确的
12 3 4 6输出65412
123 4 5 6则输出123654不知道哪错了
感觉是精度问题,又不像

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

#define MAX 20

int size(int m)//求整数的位数
{
int n=0;
while (m!=0)
{
m=m/10;
n++;
}
return(n);
}

int maxsize(int a[],int i)//求最大数的位数
{
int t;
int size(int m);
t=a[i];
for (;i>=0;i--)
{
if (a[i]>t)
t=a[i];
}
return (size(t));
}

int change(int m,int maxsize)
{
int i=0,j,k;
int sum=0,s;
int size(int m);
int a[10];
if (maxsize!=size(m))
{
j=size(m)-1;
s=m;
while (m!=0)
{
a[j]=m%10;
m=m/10;
j--;
}
j=size(s);
k=maxsize-j;
sum=s*pow(10,k);
for (i=0;i<j,k>0;i++,k--)
{
sum=sum+a[i]*pow(10,(k-1));
}
return(sum);
}
else return(m);
}

void main()
{
int a[MAX],b[MAX];
int n,i,x,k,j,t;
int s;
printf("请输入整数的个数\n");
scanf("%d",&n);
printf("请输入整数的大小空格隔开\n");
for (i=0;i<n;i++)
{
scanf("%d",&a[i]);
}
x=n-1;
s=maxsize(a,x);
for (i=0;i<n;i++)
{
b[i]=change(a[i],s);
}
for (j=0;j<n;j++)
for (k=0;k<n;k++)
{
if (b[k]<b[k+1])
{
t=a[k];
a[k]=a[k+1];
a[k+1]=t;
t=b[k];
b[k]=b[k+1];
b[k+1]=t;
}
}
printf("组成最大整数:\n");
for (i=0;i<n;i++)
printf("%d",a[i]);

}
...全文
61 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
zff869030831 2010-10-04
  • 打赏
  • 举报
回复
话说你这程序有问题,比如输入123 4 5就不是正确结果,我自己也编了下是把数都转字符串进行比较的,当遇到一个问题,还在解决当中,
千杯不醉-sen 2010-10-04
  • 打赏
  • 举报
回复
恩,解决了好。
linruixin01 2010-10-04
  • 打赏
  • 举报
回复
我已经解决了
for (i=0;i<j,k>0;i++,k--)
for (i=0;i<j&&k>0;i++,k--)
千杯不醉-sen 2010-10-04
  • 打赏
  • 举报
回复
代码太长了、、、lz吓人来了。
可能你的算法有问题,我的算法(基数法):
(1)先看每个数的第一位。分类。
(2)再看每个数的下一位。分类。
(3)再下一位。分类。
...
知道所有数的下一位为0,结束。
安分类输出即可。

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧