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

#include<bits/stdc++.h>

typedef long long ll;

using namespace std;

int ans=0;

int a[10];

ll mypow(int a,int b)

{

    ll res=1;

    for(int i=0;i<b;i++)res*=a;

    return res;

}

ll f(int pos1,int pos2)

{

    int len=pos2-pos1+1;

    ll res=0;int cnt=1;

    for(int i=pos1;i<=pos2;i++)res+=a[i]*mypow(10,len-(cnt++));

   return res;

}

int main()

{

   //freopen("in.txt","r",stdin);

    ll N;

    cin>>N;

    ll len=0;

    ll t=N;

    while(t>0)

    {

        t/=10;len++;

    }

    if(len==1){cout<<1<<endl;return 0;}

    else

    {

        t=N;int pos=len-1;

        while(t>0)

        {

            a[pos--]=t%10;

            t/=10;

        }

if(a[0]==1)ans=(f(1,len-1)+1);

            else ans=mypow(10,len-1);

        for(int i=1;i<len;i++)

        {

            if(a[i]==0)

            {

                ans+=(f(0,i-1))*mypow(10,len-i-1);

            }

            if(a[i]==1)

            {

                ans+=(f(0,i-1)*mypow(10,len-i-1));

                ans+=(f(i+1,len-1)+1);

            }

            if(a[i]>1)

            {

                ans+=(f(0,i-1)+1)*mypow(10,len-i-1);

            }

        }

        cout<<ans<<endl;

    }

    return 0;

}

最新文章

  1. 电脑缺少**.dll文件
  2. 天猫浏览型应用的CDN静态化架构演变
  3. 山东理工大学ACM平台题答案关于C语言 1137 C/C++经典程序训练7---求某个范围内的所有素数
  4. NGINX关于配置PATHINFO
  5. [Jobdu] 题目1516 : 调整数组顺序使奇数位于偶数前面
  6. 启动apache服务时报错【the requested operation has failed】
  7. 借助XShell,使用linux命令sz可以很方便的将服务器上的文件下载到本地,使用rz命令则是把本地文件上传到服务器。
  8. Arduino IDE 添加DHT11传感器第三方库的方法
  9. Mac上使用selenium自动运行chrome
  10. Oracle Instance
  11. C# 反编译破解软件方法
  12. JavaWeb学习总结(三)——Tomcat服务器学习和使用
  13. docker私有仓库pull/push
  14. Spring和mybatis的整合
  15. linux 下 安装nginx及压力测试
  16. NYOJ 113 字符串替换(C++STL解法)
  17. react 项目微信端 签名失败 原因
  18. elasticsearch删除索引报错【原】
  19. Am335x U-boot LCD简易驱动
  20. kubeadm搭建kubernetes集群之二:创建master节点

热门文章

  1. ASP.NET Core中使用EasyCaching作为缓存抽象层
  2. 十进制快速幂(牛客多校第五场)-- generator 1
  3. MySQL的库、表的详细操作
  4. Python进阶编程 类与类的关系
  5. Java new运算符解析
  6. (转)MQTT 入门介绍
  7. 关于memset的几个易错点
  8. MySQL太慢?试试这些诊断思路和工具
  9. 深入理解hive基础学习
  10. Action注入错误