1的个数

时间限制:1000 ms  |  内存限制:65535 KB
难度:3
 
描述
给你两个数a和b,你的任务是计算出1在a和b之间出现的次数,比如说,如果a=1024,b=1032,那么a和b之间的数就是:
1024 1025 1026 1027 1028 1029 1030 1031 1032
则有10个1出现在这些数中。
 
输入
输入不会超过500行。每一行有两个数a和b,a和b的范围是0 <= a, b <= 100000000。输入两个0时程序结束,两个0不作为输入样例。
输出
对于每一对输入的a和b,输出一个数,代表1出现的个数。
样例输入
1 10
44 497
346 542
0 0
样例输出
2
185
40
来源
heroj
上传者
rihkddd
算法思想:首先,a不一定比b小,要判断一下,如果我们直接暴力从a到b每个值都判断肯定是会超时的,因为a和b的范围是0 <= a, b <= 100000000。什么??不信,那我们来看一下吧。
超时代码:
 #include<stdio.h>
int main()
{
int a,b,i,cut;
while(scanf("%d%d",&a,&b)!=EOF,(a||b))
{
if(a > b)
{
int t = a;
a = b;
b = t;
}
cut = ;
for(i=a; i<=b; i++)
{
int ans = i;
while(ans > )
{
if(ans% == )
cut++;
ans/=;
}
}
printf("%d\n",cut);
}
return ;
}

我没骗你吧!下面我们来讲这题怎么做吧

算法思想:我们先求1~b 1的个数,在求1~(a-1)1的个数,然后再相减就等于a~b 1的个数了。求1~n 1的个数可以参考一下这个博客:https://blog.csdn.net/yi_afly/article/details/52012593  很详细!不说了,附上代码:

ac代码:

 #include<iostream>
#include<cstdio>
using namespace std;
int f(int n)
{
if(n < ) return ;
int ans = ;
int base = ;
int round = n;
while(round > )
{
int weight = round%;
round/=;
ans+=round*base;
if(weight == )
ans+=(n%base)+;
else if(weight > )
ans+=base;
base*=;
}
return ans;
}
int main()
{
int a,b;
while(scanf("%d%d",&a,&b)!=EOF,(a||b))
{
if(a > b)
{
int t = a;
a = b;
b = t;
}
printf("%d\n",f(b)-f(a-));
}
return ;
}

1的个数 南阳acm514的更多相关文章

  1. 5个数求最值—南阳acm

    问题描述  设计一个从5个整数中取最小数和最大数的程序   输入       输入只有一组测试数据,为五个不大于1万的正整数 输出      输出两个数,第一个为这五个数中的最小值,第二个为这五个数中 ...

  2. 三个数从小到大排序—南阳acm

    问题描述: 现在要写一个程序,实现给三个数排序的功能     输入        输入三个正整数    输出       给输入的三个正整数排序       样例输入 20 7 33      样例输 ...

  3. 今天的第一个程序-南阳acm输入三个数排序

    #include<stdio.h>main(){    int a,b,c,t;    scanf("%d%d%d",&a,&b,&c);    ...

  4. 【南阳OJ分类之语言入门】80题题目+AC代码汇总

    小技巧:本文之前由csdn自动生成了一个目录,不必下拉一个一个去找,可通过目录标题直接定位. 本文转载自本人的csdn博客,复制过来的,排版就不弄了,欢迎转载. 声明: 题目部分皆为南阳OJ题目. 代 ...

  5. 南阳ACM8-一种排序

    /* 一种排序 时间限制:3000 ms  |  内存限制:65535 KB 难度:3 描述 现在有很多长方形,每一个长方形都有一个编号,这个编号可以重复:还知道这个长方形的宽和长,编号.长.宽 都是 ...

  6. Linux上如何查看物理CPU个数,核数,线程数

    首先,看看什么是超线程概念 超线程技术就是利用特殊的硬件指令,把两个逻辑内核模拟成两个物理芯片,让单个处理器都能使用线程级并行计算,进而兼容多线程操作系统和软件,减少了CPU的闲置时间,提高的CPU的 ...

  7. 计算Div标签内Checkbox个数或已被disabled的个数

    先看下面的html: 计算div内的checkbox个数:$('#divmod input[type="checkbox"]').length 计算div内checkbox被dis ...

  8. C#经典笔试题-获取字符串中相同的字符以及其个数

    public Dictionary<char,int> GetStrSameAs(string str){ //将字符串转换成一个字符数组. char[] charArray=str.To ...

  9. Java 计算N阶乘末尾0的个数-LeetCode 172 Factorial Trailing Zeroes

    题目 Given an integer n, return the number of trailing zeroes in n!. Note: Your solution should be in ...

随机推荐

  1. Maven学习总结(一)——pom.xml文件配置详解

    <build>标签:<plugins>给出构建过程中所用到的插件 <plugins> <plugin> <groupId>org.apach ...

  2. yii2.0里自己写的源码上传图片

    在做项目过程中,用了源码表单上传, <form action="?r=pre/create" method="post" enctype="mu ...

  3. 020hashlib模块

    #里面内容没有见过,可能会比较难懂,需要找资料.我只是记录了视频中的用法,其他理解的东西,我直接理解,就没有写下来了.下面内容是视频演示过程 import    hashlib m = hashlib ...

  4. PTA练习题之7-1 出租车计价(15 分)

    7-1 出租车计价(15 分) 本题要求根据某城市普通出租车收费标准编写程序进行车费计算.具体标准如下: 起步里程为3公里,起步费10元: 超起步里程后10公里内,每公里2元: 超过10公里以上的部分 ...

  5. (转)C++ 自由存储区是否等价于堆?

      “free store” VS “heap” 当我问你C++的内存布局时,你大概会回答: “在C++中,内存区分为5个区,分别是堆.栈.自由存储区.全局/静态存储区.常量存储区”. 如果我接着问你 ...

  6. Codeforces Round #437 (Div. 2)[A、B、C、E]

    Codeforces Round #437 (Div. 2) codeforces 867 A. Between the Offices(水) 题意:已知白天所在地(晚上可能坐飞机飞往异地),问是否从 ...

  7. 打印出类所在的jar包

    ackage time; /** * Created by sheting on 10/20/2017 */ public class Test { public static void main(S ...

  8. 【[SHOI2015]超能粒子炮·改】

    就是运用\(Lucas\)推一个柿子 首先是前置芝士\(Lucas\)定理 \[C_{n}^{m}\%p=C_{n/p}^{m/p}*C_{n\%p}^{m\%p}\%p\] 至于证明 我建议去问一下 ...

  9. 配置开发环境&安装sklearn

    我的开发环境是Jupyter lab,所用的库和版本大家参考: Python 3.7.1(你的版本至少要3.4以上) Scikit-learn 0.20.0 (你的版本至少要0.19) Graphvi ...

  10. R语言学习笔记1——R语言中的基本对象

    R语言,一种自由软件编程语言与操作环境,主要用于统计分析.绘图.数据挖掘.R本来是由来自新西兰奥克兰大学的Ross Ihaka和Robert Gentleman开发(也因此称为R),现在由“R开发核心 ...