小蓝认为如果一个数含有偶数个数位,并且前面一半的数位之和等于后面 一半的数位之和,则这个数是他的幸运数字。例如2314是一个幸运数字,因为 它有4个数位,并且2+3=1+4。现在请你帮他计算从1至100000000之间 共有多少个不同的幸运数字?

这道题思路比较简单,一个数对10取对数然后向上取整可以得到它的位数,对于位数为偶数的数,按位枚举,前一半相加后一半相加。

#include<iostream>
#include<cmath>
using namespace std;
bool IsLucky(int n)
{
int m=log10(n)+1,sum1=0,sum2=0,index=1;
if(m%2!=0)
return false;
while(n)
{
int dight=n%10;
if(index>m/2)
sum2+=dight;
else
sum1+=dight;
n/=10;
index++;
}
return sum1==sum2;
}

int main(){
int sum=0;
for(int i=1;i<=100000000;i++)
{
if(IsLucky(i))
sum++;
}
cout<<sum;
}