问题描述
实验2-4:编程进行卡布列克运算。所谓卡布列克运算,是指任意一个四位数,只要它们各个位上的数字不全相同,就有这样的规律:1)把组成这个四位数的四个数字由大到小排列,形成由这四个数字构成的最大数字2)把组成这个四位数的四个数字由小到大排列,形成由这四个数字构成的最小的四位数3)求出以上两数之差,得到一个新的四位数重复以上过程,总能得到最后的结果是6174。相关的主要代码:usingSystem;usingSystem.Collections.Generic;usingSystem.Text;namespaceSY2_4{classProgram{staticvoidMain(string[]args){Console.Write("请输入一个4位整数");strings=Console.ReadLine();intnum=Convert.ToInt32(s);int[]each=newint[4];intmax,min,i,j,temp;while(num!=6174&&num!=0){i=0;while(num!=0){each[i++]=num%10;num=num/10;}for(i=0;i<3;i++)//从这一句到for(j=0;j<3-i;j++)if(each[j]>=each[j+1]){temp=each[j];each[j]=each[j+1];each[j+1]=temp;//这一句的循环表示神马意思啊?(真心菜鸟才学几天)}min=each[0]*1000+each[1]*100+each[2]*10+each[3];max=each[3]*1000+each[2]*100+each[1]*10+each[0];num=max-min;Console.WriteLine("{0}-{1}={2}",max,min,num);}Console.Read();}}}
解决方案
解决方案二:
while(num!=0){each[i++]=num%10;num=num/10;}
以上代码是把这个四位数的各位数字(各从个位开始)存在数组each中for(i=0;i<3;i++)//对数组进行由小到大排序for(j=0;j<3-i;j++)if(each[j]>=each[j+1])//如果前一个大于后一个数,交换位置{temp=each[j];each[j]=each[j+1];each[j+1]=temp;//交换}
对这个四位数的各个数字进行排序,方便获得得到四个数字组成的最大数和最小数
解决方案三:
明白点了,谢LS了!
解决方案四:
你的程序如果是老师给你学习的,那么这样的代码简直误人子弟。
解决方案五:
怎么说?
解决方案六:
设断点跟踪一下这个程序,用F10,F11来单步执行,这样对你理解会有帮助