932 2025
今年是 2025 年,对于这个数字,满足 给定两个正整数 ,如果连接起来得到 (不是相乘)满足 ,那么就是一个 2025 数。
3025 和 81 也满足这个条件。注意 9801 并不是,因为 98 和 1 连接起来是 981 而不是 9801。
表示小于等于 个数字且是 2025 数的数之和。。求 。
数的长度是 16 为,根有 8 位,可以遍历,只要确定 root
及其 square
是不是 2025 数足够快。
假定给定一个数字 ,就是这里的 root
,计算得到 square
,然后分成两个数。然后看其和的平方是不是等于 root
。假定 root
这个数有 位,那么 square
要么是 位,要么是 。如果是前者,只有一种划分方式,如果是后者,有两种。切分完之后,很容易得到实现一个函数判断一个数是否是 2025 数。这里要兼顾 9801 这种情况,也就是划分的第二个数的首个数字不能是零。
private static bool Is2005Number(long root, long square)
{
string s = square.ToString();
int length = s.Length % 2 == 0 ? 1 : 2;
for (int i = s.Length / 2; i < s.Length / 2 + length; i++)
{
if (s[i] == '0')
{
continue;
}
long first = long.Parse(s[..i]);
long second = long.Parse(s[i..]);
if (first + second == root)
{
return true;
}
}
return false;
}
first
second
两个数不用真的切分字符串然后从子串中 Parse
,可以从 square
这个数通过除法和取模得到。
这样将近 4s 可以得到结果。