// 分别计算左右两边各数的和,不同值时的数量
eg.四位数,左边数的有10~99,右边数有00~99
和有1~18 和有0~18
桶排,和相同放一个桶,分别计算左右两边不同和的数量
while (len <= 8)
{
int left[50] = { 0 };
int right[50] = { 0 };
for (int i = 0; i < num(len / 2); i++)
{
int temp = i, sum = 0;
while (temp > 0)
{
sum += temp % 10;
temp /= 10;
}left[sum]++;
}// 分别计算左右两边各数的和不同值时的数量
for (int i = num(len / 2) / 10; i < num(len / 2); i++)
{
int temp = i, sum = 0;
while (temp > 0)
{
sum += temp % 10;
temp /= 10;
}right[sum]++;
}
for (int i = 0; i < 9 * len / 2 + 1; i++)
count += right[i] * left[i];
len += 2;