#include<stdio.h>
#include<conio.h>
#include<math.h>
void main()
{
int n,i,w,j,s=0,a[5];
int flag=0;
/*退出标识变量,*/
FILE *p;
printf("shu ru n jue ding shu chu de wei shu ");
scanf("%d",&n);
while(flag==0)
{
for(i=0;i<n;i++)
{
a[i]=rand()%10;
/*用随机数长生一个数*/??
for(j=0;j<i;j++)
{
/* 判断产生的随机数与前面的数是否相同,相同则再次随机生成一个数,直到不相同*/
while(a[i]==a[j])
{
a[i]=rand()%10;
j--;
}
}
}
if(a[0]!=0)
/*a[0]不为0则退出循环*/
flag=1;
else if(a[0]==0&&a[n-1]!=0)
/*若a[0]为0,最后一位不为0,则交换,否则继续循环 */
{
w=a[0];a[0]=a[n-1];a[n-1]=w;
flag=1;
}
}
for(i=0;i<n;i++)
{
printf("%d ",a[i]);
s+=a[i]*pow(10,n-i-1);}
printf("%d",s);
if((p=fopen("c:\\asd.tet","w+"))==NULL)
{
printf("打开失败");
getch();
exit(0);
}
fwrite(a,sizeof(a),1,p);
fclose(p);
getch();
}
这个程序还有点问题,长整形最大为65535,若输入的n的值为5,最后输出的结果有可能出错(大于65535)。在产生随机数的时候我没让他循环每次打开运行的时候都是产生相同的随机数,我在WIN-TC下编的,不能用randomize(),不知道该用什么!在TC下应该可以,这个方法可以看看。
还有一种方法可以直接随机产生一个n位数,那样就不会错了,在判断是否有相同的数,第一位是否为0.。。后面差不多。