病毒(2017秋招真题)
题目描述
写入内存1到n之间的n个自然数,内存写入只接受二进制的形式,所以十进制表达中除0和1之外的其他值都没有成功写入内存。所以有多少数字写入了服务器的内存!
输入
输入中有多组测试数据。每组测试数据在单独的一行中,为整数n(1< =n < =
1
0
9
{10^9}
109)。
样例输入
10
20
输出
2
3
100%正解:
n = 1, result = 1 =
2
0
{2^0}
20
n = 10 ,result = 2 =
2
1
{2^1}
21
n = 100,result = 4 =
2
2
{2^2}
22
恰好就是2的位数 - 1次幂
110 就等于100 + 10 = 4 + 2 = 6
111 就等于100 + 10 + 1 = 4 + 2 + 1 = 7
112 包含一个100,一个10,一个1,所以也是7
50%解:
就是一位一位的判断,但是在50%之后就TLE了。
# include <bits/stdc++.h>
using namespace std;
int main(){
int n;
while(cin>>n){
int w = 0;
int n_ = n;
while(n_){
n_ /= 10;
w ++;
}
int num = 0;
for(int i=w;i>0;i--)
{
if(n/(int)pow(10,i-1) != 0)
{
num += pow(2,i-1);
n -= pow(10,i-1);
cout<<n<<"--"<<num<<"--"<<pow(2,i-1)<<endl;
}
}
cout<<num<<endl;
}
return 0;
}