病毒

题目描述
									

小B最近对破解和程序攻击产生了兴趣,她迷上了病毒,然后可怕的事情就发生了。不知道什么原因,可能是小B的技术水平还不够高,小B编写的病毒程序在攻击一个服务器时出现了问题。尽管成功的侵入了服务器,但并没有按照期望的方式发挥作用。


小B的目的很简单:控制服务器的内存区域,试图在内存中装入从1到n之间的n个自然数,以覆盖内存区域。可能是小B对编程理解上的问题,病毒似乎没有完全成功。可能是由于保护机制的原因,内存写入只接受二进制的形式,所以十进制表达中除0和1之外的其他值都没有成功写入内存。小B希望知道,究竟有多少数成功的写入了服务器的内存!

输入

输入中有多组测试数据。每组测试数据在单独的一行中,为整数n(1< =n < =10^9)。

样例输入

10

20


输出

对每组测试数据,在单独的行中输出问题的答案。

样例输出

2

3


时间限制C/C++语言:1000MS其它语言:3000MS
内存限制C/C++语言:65536KB其它语言:589824KB
#include<iostream> #include <iomanip> #include<math.h> using namespace std; int main() { int N; int m; while(cin >> N) { int num=0; for(int i=1;i<=N;i++) { for(m=i;m!=0;m=m/10) { if((m%10)>1) break; } if(m==0) { num++; } } cout<<num; } return 0; }

可以完成题目要求,但是达不到题目所说的边界条件(1< =n < =10^9);

可以采用double型变量定义N,不过这就要对除法计算和求余计算加上一些取整函数floor等;

可以采用字符串来计算;

#include<iostream> #include<iomanip> #include<math.h> using namespace std; int main() { char N[11]; while(cin >> N) { int num=1; for(int i=0;N[i];i++) { if(N[i]>'1') { for(int j=i;N[j];j++) { N[j]='1'; } } } for(int i=1;N[i];i++) { num=num*2; if(N[i]=='1') num++; } cout<<num<<endl; } return 0; }

展开阅读全文

没有更多推荐了,返回首页