1.题目描述—请见链接
2.思路解析
本题思路不难想出,但是应该注意几种特殊情况:
1、如果用的是while (s != “6174”)循环,则直接输入6174时,输出结果错误;所以可以使用do-while循环,无论输入的是多少,都可以先循环一次。
2、输入的数字不一定是4位的,因为循环处理的逻辑是按照四位数来设计的,所以每次应该将结果补成4位数。
3.代码
static void Main(string[] args)
{
string s = Console.ReadLine();
int len = s.Length;
List<string> list = new List<string>();
string l, r;
// 补齐成为4位数,防止索引越界异常
for (int i = 0; i < 4; i++)
{
if (i < 4 - len)
s = "0" + s;
else
break;
}
do
{
l = null;
r = null;
list.Clear();
for (int i = 0; i < s.Length; i++)
list.Add(s[i].ToString());
list.Sort();
r = list[0] + list[1] + list[2] + list[3];
l = list[3] + list[2] + list[1] + list[0];
s = (int.Parse(l) - int.Parse(r)).ToString();
len = s.Length;
for (int i = 0; i < 4; i++)
{
if (i < 4 - len)
s = "0" + s;
else
break;
}
Console.WriteLine("{0} - {1} = {2}", l, r, s);
} while (s != "6174"&& s!="0000");
Console.ReadKey();
}
4.总结
一定要考虑每一种可能出现的情况。