对于《编程题》的帖子自己所作的程序,自己很满意,众位请评判。
程序代码:
/* 此程序为避免死循环,特加一变量控制,当循环过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(); }