zoukankan      html  css  js  c++  java
  • 1的个数(数学)

    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
    题解:坑了一早上。。
    代码:
     1 #include<iostream>
     2 #include<cstdio>
     3 using namespace std;
     4 int p[20]={1,10,100,1000,10000,100000,1000000,10000000,100000000,1000000000};
     5 int get1(int x){
     6     int sum=0,k=0;
     7     int t=x;
     8     while(t)  
     9     {  
    10      if(t%10>1) 
    11      sum+=p[k];  
    12         else if(t%10==1) 
    13         sum+=x%p[k]+1;  
    14         
    15         sum+=t%10*k*p[k-1];  
    16         
    17         t/=10;
    18         k++;  
    19     }  
    20     return sum;
    21 }
    22 int main(){
    23     int a,b;
    24     while(scanf("%d%d",&a,&b),a|b){
    25         if(a>b)swap(a,b);
    26         int ans=get1(b)-get1(a-1);
    27         printf("%d
    ",ans);
    28     }
    29     return 0;
    30 }
  • 相关阅读:
    9-1058. 选择题(20)
    8-素数打表
    7- 插入与归并
    6-爱丁顿数(题意理解)
    5-单身狗(时间和空间的相互选择)
    4-1068. 万绿丛中一点红
    3-1067. 试密码
    2-素数打比表
    21-矩形的嵌套
    maven设置打jar包并引入依赖包
  • 原文地址:https://www.cnblogs.com/handsomecui/p/4906314.html
Copyright © 2011-2022 走看看