题目
有点忘记了,大概就是4/7是lucky num吧,然后仅有4/7组成的数字,依次排列
4,7,44,47,74,77,444….这样的,给定i,表示第几个这样的数,求输入数字
思路
人啊,千万不能急了,大概思路是对的,细节还是考虑好,结果也不咋的
要淡定了
- 求出有多少位吧, floor(log2(i+1))
- 然后看第一位是4还是7,求中间的那个分界位数long half = (long)pow(2,num)-1+(long)pow(2,num-1); 之前为4,之后7
- 然后减去循环,看第二位,大概就是减去half后的相对距离不变吧
- 所以整个循环次数为多少位了
注意
精度啊,long long result=0;
pow返回的是double
代码
void countnum(int i)
{
long long result=0;
int num = floor(log2(i+1));
while(num>1)
{
long half = (long)pow(2,num)-1+(long)pow(2,num-1);
if(i< half)
{
result=pow(10,num-1)*4+result;
i = half-i-1+(long)pow(2,num-1);
}
else
{
result=pow(10,num-1)*7+result;
i = i-half-1+(long)pow(2,num-1);
}
num--;
}
result+=((i==1)?4:7);
cout<<"result"<<result<<endl;
}