找错,编译通过
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]);
}