nod_1009 数字1的数量(分析题)

题意:

给定一个十进制正整数N,写下从1开始,到N的所有正数,计算出其中出现所有1的个数。

例如:n = 12,包含了5个1。1,10,12共包含3个1,11包含2个1,总共5个1。

Input

输入N(1 <= N <= 10^9)

OutPut

输出包含1的个数

思路:

假设十进制数N的位数是K。我们分别统计【1,N】中第1位、第2位,....,第K位是1的数的个数。然后相加。【【巧妙!】】

分类讨论。

代码:

int n;

int main(){

    cin >> n;
    int w=(int)log10(n)+1;
    ll ans=0;
    rep(i,0,w-1){
        int left, cur, right, tmp;
        cur=w-i;
        tmp=(int)pow(10,cur-1);
        right=n%tmp;
        left=n/tmp/10;
        int curNum=n/tmp%10;
        if(curNum<1){
            ans+=((ll)left*tmp);
        }
        else if(curNum==1){
            ans+=((ll)left*tmp+1+right);
        }
        else{
            ans+=((ll)(left+1)*tmp);
        }
    }
    print("%lld\n",ans);

    ret 0;
}
时间: 2024-11-05 16:37:55

nod_1009 数字1的数量(分析题)的相关文章

数字0-9的数量

数字0-9的数量 基准时间限制:1 秒 空间限制:131072 KB 给出一段区间a-b,统计这个区间内0-9出现的次数. 比如 10-19,1出现11次(10,11,12,13,14,15,16,17,18,19,其中11包括2个1),其余数字各出现1次. Input 两个数a,b(1 <= a <= b <= 10^18) Output 输出共10行,分别是0-9出现的次数 Input示例 10 19 Output示例 1 11 1 1 1 1 1 1 1 1分析:数位dp做多了发现

51nod- 【1042 数字0-9的数量 】

题目链接:https://www.51nod.com/onlineJudge/questionCode.html#!problemId=1042 题目: 1042 数字0-9的数量 基准时间限制:1 秒 空间限制:131072 KB 分值: 10 难度:2级算法题 给出一段区间a-b,统计这个区间内0-9出现的次数. 比如 10-19,1出现11次(10,11,12,13,14,15,16,17,18,19,其中11包括2个1),其余数字各出现1次. Input 两个数a,b(1 <= a <

[51 nod]1009 数字1的数量

1009 数字1的数量 基准时间限制:1 秒 空间限制:131072 KB 分值: 5 难度:1级算法题 给定一个十进制正整数N,写下从1开始,到N的所有正数,计算出其中出现所有1的个数. 例如:n = 12,包含了5个1.1,10,12共包含3个1,11包含2个1,总共5个1. Input 输入N(1 <= N <= 10^9) Output 输出包含1的个数 Input示例 12 Output示例 5详解请看大牛博客:http://www.cnblogs.com/jy02414216/ar

51nod 1042 数字0-9的数量 (数位dp、dfs、前导0)

1042 数字0-9的数量 基准时间限制:1 秒 空间限制:131072 KB 分值: 10 难度:2级算法题 收藏 关注 取消关注 给出一段区间a-b,统计这个区间内0-9出现的次数. 比如 10-19,1出现11次(10,11,12,13,14,15,16,17,18,19,其中11包括2个1),其余数字各出现1次. Input 两个数a,b(1 <= a <= b <= 10^18) Output 输出共10行,分别是0-9出现的次数 Input示例 10 19 Output示例

申论作答攻略:对比分析题作答技巧

在申论考试中,对比分析题是相对较难的题型之一,考生在这一题型上往往失分严重. 1.关系对比分析: 整体表明对象间的关系--深入分析对象间的关系.如让考生分析A和B之间的关系,思路如下:先找出A和B的整体关系,继而在具体分析A和B之间的关系,若是让考生分析A.B.C之间的关系,那么思路为:先找出三者的整体关系,之后再分别比较:A与B.C的关系;B与A. C的关系;C与A.B的关系. 2.异同点对比分析: 概括几个对象的做法--对比罗列出相同点--对比罗列不同点.如让考生分析A和B的异同,思路将是:

NYOJ 648 数字1的数量

数字1的数量 时间限制:1000 ms  |  内存限制:65535 KB 难度:1 描述 给定一个十进制正整数N,写下从1开始,到N的所有正数,计算出其中出现所有1的个数. 例如:n = 12,包含了5个1.1,10,12共包含3个1,11包含2个1,总共5个1. 输入 输入N(0 <= N <= 10^9) 多组测试数据 输出 输出包含1的个数 样例输入 12 样例输出 5 同 点击打开链接 AC码: #include<stdio.h> int fun(int n) { if(

51nod 1009 数字1的数量 数位dp

1009 数字1的数量 基准时间限制:1 秒 空间限制:131072 KB 给定一个十进制正整数N,写下从1开始,到N的所有正数,计算出其中出现所有1的个数. 例如:n = 12,包含了5个1.1,10,12共包含3个1,11包含2个1,总共5个1. Input 输入N(1 <= N <= 10^9) Output 输出包含1的个数 Input示例 12 Output示例 5 #include<bits/stdc++.h> using namespace std; #define

1042 数字0-9的数量(非数位dp解法)

1042 数字0-9的数量 给出一段区间a-b,统计这个区间内0-9出现的次数. 比如 10-19,1出现11次(10,11,12,13,14,15,16,17,18,19,其中11包括2个1),其余数字各出现1次. 输入 两个数a,b(1 <= a <= b <= 10^18) 输出 输出共10行,分别是0-9出现的次数 输入样例 10 19 输出样例 1 11 1 1 1 1 1 1 1 1 题意很明确,其实只要能求的到b的就可以.然后用val(b) - val(a-1)就能得出结果

掘安攻防实验室(流量分析题)

突然想做一下流量分析题,记得掘安攻防实验室上面有很多的流量分析题目,故做之 流量分析题一般使用的都是wireshark,(说wireshark是流量分析工具里面的王牌应该没人反对吧 夺取阿富汗 说了分析http头,所以直接过滤http协议 追踪流 发现响应头里面有CTF: dGhlRmxhZ0luSHR0cEhlYWRlcg== 一看就是base64编码,解码得: 夺取阿曼: 下载之后解压,使用wireshark打开出错 当然在题目里面已经提示了pcap文件已经损毁,另外还有zip文件存在,我们