206 Concealed Square
找出唯一一个符合如下条件的数字:它的平方是具有 1_2_3_4_5_6_7_8_9_0 形式的数。每个 _ 都代表了单个数字。
首先,我们对题目给出的形式做一个分析。
平方数最后一个数字是零,那么我们要找的数字(假设是 )最后一位是零。 最后一位是零,那么平方之后的数字末尾有两个零。
所以,问题可以转化为找到一个数字(假设是 ),平方具有1_2_3_4_5_6_7_8_9 的形式。这里的 。
我们构造一个循环去找这个数。题目中说了,一定存在这样一个数,那么我们从最小可能满足题意的数 100000003 开始计算就好了,不用管循环的上限。
再进一步考虑,既然肯定有满足题意的数字,那么平方后第一位肯定是 1。于是,可以粗暴的判定这个数是否符合条件。
string s = (i * i).ToString();
return s[2] == '2' && s[4] == '3' && s[6] == '4' && s[8] == '5' && s[10] == '6' && s[12] == '7' && s[14] == '8';
程序还能进一步优化。
考虑平方数最后一位是 9,只有尾数是 3 或者 7 的数字满足题意。那么,添加一个判断让循环更快:
即每十个数中,我们只需要检查两个数是否满足题意。