题目描述
小蓝认为如果一个数含有偶数个数位,并且前面一半的数位之和等于后面一半的数位之和,则这个数是他的幸运数字。例如 2314 是一个幸运数字,因为它有 4 个数位,并且 2 + 3 = 1 + 4。现在请你帮他计算从 1 至 100000000 之间共有多少个不同的幸运数字。
整体思路
遍历 1 至 100000000 中的所有数字,判断幸运数字。
#include <bits/stdc++.h>
#define int long long
#define endl '\n'
using namespace std;
// 计算数字的各位数之和
int sumOfDigits(int n)
{
int sum = 0;
while(n > 0)
{
sum += n % 10;
n /= 10;
}
return sum;
}
bool isLucky(int n)
{
int len = 0;
int temp = n;
while(temp > 0)
{
len++;
temp /= 10;
}
if(len % 2 != 0)
{
return false;
}
int half = len / 2;
int firstHalf = 0, secondHalf = 0;
while(len > 0)
{
if(len > half)
{
firstHalf = firstHalf * 10 + n % 10;
}
else
{
secondHalf = secondHalf * 10 + n % 10;
}
n /= 10;
len--;
}
return sumOfDigits(firstHalf) == sumOfDigits(secondHalf);
}
signed main()
{
std::ios::sync_with_stdio(false);
std::cin.tie(nullptr);
int cnt = 0;
for(int i = 1; i <= 100000000; i++)
{
if(isLucky(i))
{
cnt++;
}
}
cout << cnt << endl;
return 0;
}