看看之前我的话:
>>>我来告诉你吧,你这代码是错的,和它题目本身不符
>>>碰巧得到的结果和原问题一样而已
请留意一下我之前说过的话,然后你反思一下,是不是你自己的问题?
" border="0" />
>>>我来告诉你吧,你这代码是错的,和它题目本身不符
>>>碰巧得到的结果和原问题一样而已
请留意一下我之前说过的话,然后你反思一下,是不是你自己的问题?
程序代码:
/*
此程序为避免死循环,特加一变量控制,当循环过4次后,跳出while循环,结束程序.
由于鄙人新手,所以所作程序难免有些欠妥,不免让高手们贻笑大方。哪有待改进之处,还望各位不误吝指教,谢谢。
*/
#include<stdio.h>
/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~输入一个四位数*/
int shuru()
{
int i;
char c;
do
{
system("cls");
printf("请输入一个四位整数:\n");
scanf("%d",&i);
while(c=getchar()!='\n'&&c!=EOF);
puts(" ");
if(i<1000||i>9999)
{
printf("您的输入有误,请重新输入。\n");
sleep(1);
}
}
while(i<1000||i>9999);
return i;
}
/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~转换*/
void zhuanhuan(int *a,int *b)
{
int t;
t=*a;
*a=*b;
*b=t;
}
/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~逆排序*/
int paixu_n(int a)
{
int b[4],i,j;
b[0]=a/1000;
b[1]=(a-b[0]*1000)/100;
b[2]=(a-b[0]*1000-b[1]*100)/10;
b[3]=a%10;
for(i=0;i<4;i++)
for(j=0;j<4;j++)
if(b[j]<b[i])
zhuanhuan(&b[i],&b[j]);
return b[0]*1000+b[1]*100+b[2]*10+b[3];
}
/*?~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 顺排序*/
int paixu_s(int a)
{
int b[4],i,j;
b[0]=a/1000;
b[1]=(a-b[0]*1000)/100;
b[2]=(a-b[0]*1000-b[1]*100)/10;
b[3]=a%10;
for(i=0;i<4;i++)
for(j=0;j<4;j++)
if(b[j]>b[i])
zhuanhuan(&b[i],&b[j]);
return b[0]*1000+b[1]*100+b[2]*10+b[3];
}
/*###################################################### 主函数*/
int main(void)
{
int yuansu,zhuanhuan_s,zhuanhuan_n,zhi;
int i=0;
yuansu=shuru(); /*~~~~~~~~输入四位数*/
zhuanhuan_n=paixu_n(yuansu);/*~~~~~~~~~~~~~~首次将这四位数转换为逆序*/
while(1)
{
zhuanhuan_n=paixu_n(zhuanhuan_n);/*~~~~~~~~~~循环一次以后,将新得到的数字再排序*/
zhuanhuan_s=paixu_s(zhuanhuan_n);/*~~~~~~~~~将逆序的数字顺序排列*/
zhuanhuan_n-=zhuanhuan_s; /*~逆序与顺序数相减,新值赋与变量zhuanhuan_n */
printf("%d\n",zhuanhuan_n);/*~~~输出得到的结果*/
if(zhuanhuan_n==6174)
i++; /*~~~~~~~~~~~~~当值为死循环值时,i值增1*/
if(i>=3)
break; /*~~~~~~~~~~当死循环4次后,跳出程序*/
}
printf("*******************************\n\n%d\n",zhuanhuan_n);
getch();
}