小蓝认为如果一个数含有偶数个数位,并且前面一半的数位之和等于后面 一半的数位之和,则这个数是他的幸运数字。例如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; }
|