小明正看着 203879 这个数字发呆。
原来,203879 * 203879 = 41566646641
这有什么神奇呢?仔细观察,203879 是个6位数,并且它的每个数位上的数字都是不同的,并且它平方后的所有数位上都不出现组成它自身的数字。
具有这样特点的6位数还有一个,请你找出它!
再归纳一下筛选要求:
1. 6位正整数
2. 每个数位上的数字不同
3.
其平方数的每个数位不含原数字的任何组成数位
答案是一个6位的正整数。
/// <summary> /// 不同数字组成的6位数,其平方值中的各个数都和这六位数不同。 /// </summary> public class NumberInMi { /// <summary> /// 获取6位数的数组表示。 /// </summary> /// <param name="num"></param> /// <returns></returns> private int[] GetArray(int num) { int arrrayLenth = num.ToString().Length; int[] nums = new int[arrrayLenth]; for (int i = 0; i < arrrayLenth; i++) { nums[i] = num % 10; num = num / 10; } return nums; } /// <summary> /// 判断num是否是不同数字组成的6位数。 /// </summary> /// <param name="num"></param> /// <returns></returns> public bool IsSame(int[] nums) { for (int i = 0; i < nums.Length+1; i++) { for (int j = i+1; j <nums.Length; j++) { if (nums[i]==nums[j]) { return true; } } } return false; }//end IsSame /// <summary> /// 平方值中的各个数都和这六位数不同 /// </summary> /// <param name="num"></param> /// <returns></returns> public bool IsSameWithSpare(long num) { long b = num * num; long[] orig = GetArray(num); long[] sp = GetArray(b); //if (IsSame(sp)) //{ // return true; //} for (int i = 0; i < orig.Length; i++) { for (int j = 0; j < sp.Length; j++) { if (orig[i]==sp[j]) { return true; } } } return false; } private bool IsSame(long[] nums) { for (int i = 0; i < nums.Length + 1; i++) { for (int j = i + 1; j < nums.Length; j++) { if (nums[i] == nums[j]) { return true; } } } return false; } private long[] GetArray(long b) { int length = b.ToString().Length; long[] arr = new long[length]; for (int i = 0; i < length; i++) { arr[i]= b % 10; b = b / 10; } return arr; } /// <summary> /// 结果:203879 639172 /// </summary> public void Run() { for (long i = 100000; i < 9999999; i++) { if (!IsSame(GetArray(i))) { if (!IsSameWithSpare(i)) { Console.WriteLine("result:" + i.ToString()); } } } } }