求一批整数中出现最多的个位数字_(43)C++面试之从1到n整数中1出现的次数

e26f6fb814e538453eca0472f9e6c3da.png

// 面试题43:从1到n整数中1出现的次数

// 题目:输入一个整数n,求从1到n这n个整数的十进制表示中1出现的次数。例如

// 输入12,从1到12这些整数中包含1 的数字有1,10,11和12,1一共出现了5次。


#include <cstdio>
#include <cstring>
#include <cstdlib>int NumberOf1Between1AndN(int n)
{if(n<0)return 0;//数字转字符串char str[50];sprintf(str,"%d",n);//21345变为“21345”return NumberOf1(str);
}int NumberOf1(const char* str)
{if(!str||*str<'0'||*str>'9'||*str='0')return 0;//假设输入21345int first=*str-'0';//最高位字符串转整数 2unsigned int length =static_cast<unsigned int>(strlen(str));//5if(length==1&&first==0)//输入为0return 0;if(length==1&&first>0)//输入为1-9return 1;//输入str “21345”//numFirst是数字10000--19999的第一位的数目//开头是1, 后面四位为1-9里任意一个 供10×10×10×10,写一个函数实现这个计算int numFirst=0;if(first>1)//2numFirst=PowerBase10(length-1);else if(first==1)//12345numFirst=atoi(str+1)+1;//atoi为char转int, atoi(str+1)结果是2345//numOtherDigits为 1346--21345除第一位之外的数位中的数目int numOtherDigits=first*(length-1)*PowerBase10(length-1)//2*(5-1)*10*10*10//numRecursive是1---1345中的数目,递归实现int numRecursive=NumberOf1(str+1);//numberOf1("1345")return numFirst+numOtherDigits+numRecursive;}int PowerBase10(unsigned int n)
{int result=1;for(int i=0;i<n;++i)result*=10;return result;
}void Test(char* testName,int n,int expected)
{if(testName==nullptr)printf("failed n");int result=NumberOf1Between1AndN(n);if(result==expected)printf("pass n");else{printf("failed n");}}void Test()
{Test("Test1", 1, 1);Test("Test2", 5, 1);Test("Test3", 10, 2);Test("Test4", 55, 16);Test("Test5", 99, 20);Test("Test6", 10000, 4001);Test("Test7", 21345, 18821);Test("Test8", 0, 0);
}int main()
{char str[]="12345";int first=*str-'0';int num=atoi(str+1);printf("first=%d n",first);//1printf("num=%d n",num);//2345Test();return 0;
}
int NumberOf1Between1AndN(unsigned int n)
{int number = 0;for(unsigned int i = 1; i <= n; ++ i)number += NumberOf1(i);return number;
}int NumberOf1(unsigned int n)
{int number = 0;while(n){if(n % 10 == 1)number ++;n = n / 10;}return number;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/527508.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

j2me安装_Java第一步 JDK安装

安装JDK之前需要了解Windows下DOS命令winr 输入cmddir&#xff1a; 列出当前目录下的文件以及文件夹md&#xff1a;创建目录[文件夹]rd&#xff1a; 删除目录cd&#xff1a; 进入指定目录cd..&#xff1a;从当前目录退回到上一级目录cd&#xff1a;从当前目录退回到根目录&…

sql left join用法_图解 SQL 中 JOIN 的各种用法

点击上方“Java知音”&#xff0c;选择“置顶公众号”技术文章第一时间送达&#xff01;作者&#xff1a;CodingStarcnblogs.com/BoyceYang/p/3145279.html一、概要JOIN对于接触过数据库的人&#xff0c;这个词都不陌生&#xff0c;而且很多人很清楚各种JOIN&#xff0c;还有很…

超级计算机清华,从清华到华科 名校为何主办超级计算机大赛?

古罗马政治家、哲学家塞涅卡曾经说过&#xff1a;“自然赐给了我们知识的种子&#xff0c;而不是知识的本身。”在超级计算机领域&#xff0c;ASC世界大学生超级计算机竞赛正是这样一颗“种子”&#xff0c;北京、上海、广州、太原、武汉……ASC竞赛正在将超算的知识播撒到全球…

计算机一级查询记录,技巧查看电脑中使用过的记录痕迹的详细教程

XP的系统是很多的用户还在操作的一款系统&#xff0c;其实现在更新以后最新的系统也是很好的使用的&#xff0c;开机的时候很多的用户对于不同的设置开机的时间还有如果你的电脑被别人的看到了的话是怎么实现查看的呢&#xff0c;今天小编就来跟大家分享一下技巧查看电脑中使用…

foreach判断最后一个_ArrayList集合为什么不能使用foreach增删改?

点击上方“Java技术前线”&#xff0c;选择“置顶或者星标”与你一起成长译者&#xff1a;奋斗的小程序员链接&#xff1a;http://suo.im/4XaI8Q编程过程中常常需要使用到集合&#xff0c;而ArrayList也是我们常常使用的&#xff0c;但是最近在一次删除和增加中出现了一些问题&…

计算机文本处理竞赛题目,文字处理竞赛题目(word2010).pdf

文字处理竞赛题目(word2010).pdf (5页)本资源提供全文预览&#xff0c;点击全文预览即可全文预览,如果喜欢文档就下载吧&#xff0c;查找使用更方便哦&#xff01;11.90 积分文字录入与排版高手竞赛 大 学 计 算 机 基 础 教 研 室 2 0 1 5 / 1 1 / 1 滁州学院 滁州学院《大学计…

头部外伤指什么_什么是颅骨缺损?

什么是颅骨缺损&#xff1f;颅骨缺损颅骨缺损(defect of skull)是指因开放性颅脑损伤造成的颅骨残缺&#xff0c;导致脑部与外界直接相通。颅脑创伤是造成颅骨缺损的主要原因。颅骨缺损综合征是该病的主要症状&#xff0c;常表现为头痛、头晕、缺损处不适、缺损边缘疼痛及感觉过…

java+什么时候才需要deploy_细思极恐 - 什么才是真正的会写 Java ?

文章核心其实&#xff0c;本不想把标题写的那么恐怖&#xff0c;只是发现很多人干了几年java以后&#xff0c;都自认为是一个不错的java程序员了&#xff0c;可以拿着上万的工资都处宣扬自己了&#xff0c;写这篇文章的目的并不是嘲讽和我一样做java的同行们&#xff0c;只是希…

csgo自建服务器打人机,csgo如何跟好友打人机 | 手游网游页游攻略大全

发布时间&#xff1a;2017-02-14CSGO即将在4月18日开启国服先锋测试,如何在CSGO中添加好友呢?下面为大家分享一下CSGO国服加好友方法,一起来看看吧. CSGO国服怎么加好友: 1.打完官匹想加队友好友只需要打开游戏界面正上方观战-我的比赛. ...标签&#xff1a;攻略秘籍 乐游知道…

java8新特性_Java8新特性_lambda表达式

lambda介绍λ &#xff0c;希腊字母表中排序第十一位的字母&#xff0c;英语名称为Lambda。lambda 表达式&#xff0c;也可称为闭包&#xff0c;它是推动Java 8 发布的最重要新特性&#xff0c;允许把函数作为一个方法的参数&#xff08;函数作为参数传递进方法中&#xff09;。…

ajax实现局部删除,Express+AdminLTE+hbs+Ajax实现局部刷新终极版(第二部分)

上一篇中已经把所有思路都理顺了&#xff0c;这边我们就开始具体编码吧。(如果您有更好的办法&#xff0c;欢迎留言讨论&#xff01;互相学习&#xff01;)我们先来看一下最终完成的效果&#xff1a;一&#xff1a;完整项目目录结构如图所示&#xff1a;二&#xff1a;更换模板…

打乱 数字_崔召幼儿园中班悦享时光——亲子益智游戏数字配对

亲爱的小朋友们&#xff0c;我们已经掌握了简单的&#xff0c;数字宝宝&#xff0c;今天让我们通过已有的数字经验和点数经验来玩一个数字配对的游戏吧&#xff01;准备&#xff1a;1.准备骰子一个&#xff0c;吸管一支&#xff0c;数字1-6卡片。 2.一个鞋盒盖&#xff0c;一个…

云服务器BBC销售渠道,云服务器BBC控制台

云服务器BBC控制台 内容精选换一换云服务器备份提供了Web化的服务管理平台&#xff0c;即管理控制台和基于HTTPS请求的API(Application programming interface)管理方式。API方式如果用户需要将云服务平台上的服务器备份集成到第三方系统&#xff0c;用于二次开发&#xff0c;请…

安全策略_Spring Security 实战干货:如何实现不同的接口不同的安全策略

1. 前言欢迎阅读 Spring Security 实战干货 系列文章 。最近有开发小伙伴提了一个有趣的问题。他正在做一个项目&#xff0c;涉及两种风格&#xff0c;一种是给小程序出接口&#xff0c;安全上使用无状态的JWT Token&#xff1b;另一种是管理后台使用的是Freemarker&#xff0c…

python外星人入侵怎么发给别人_python_外星人入侵(1-1)

sys&#xff1a;system的简称。包含了一些与系统有关的函数。 step1&#xff1a;构建游戏的主框架 import sys import pygame def run_game(): 初始化游戏并创建一个屏幕对象 pygame.init() # 创建一个显示窗口&#xff0c;宽1200像素&#xff0c;高800像素 screen pygame.dis…

delphi listview 添加数据 慢_Delphi 二十四岁, Delphi 10.3.1 发布

Delphi1 是 Borland于1995年2月14日发布&#xff0c;因此2019年2月14日是该产品发布的24周年纪念日。如果你想了解一些关于该产品及其发布的历史&#xff0c;你可以参考文章“22 Years of Delphi and it Still Rocks”。在那篇文章中&#xff0c;我收集了一些早期产品的照片&am…

找规律万能公式_有一个万能公式,可以帮你解决任何烦恼!

有一个万能公式&#xff0c;可以帮你解决任何烦恼。我是在十几年前学到的&#xff0c;一直使用到现在。不仅简单&#xff0c;而且非常有效&#xff0c;只有3步&#xff0c;马上就能现学现用。如果你目前正好碰到了什么难题&#xff0c;不妨试试这个万能公式。01第一步&#xff…

vue 判断两对象是否一致_你的.vue文件就已经是你的文档了

更新&#xff1a;文档地址&#xff1a;http://vuese.org昨天发布了vuese1.0&#xff0c;这是我的一个新的开源项目&#xff0c;用来解析Vue SFC并生成markdown文档&#xff0c;如下&#xff1a;HcySunYang/vuese​github.com这篇文章不会介绍如何使用&#xff0c;至于如何使用大…

centos7 oracle_Centos7主机名变成bogon的原因及解决方法

问题描述虚拟机在设置完静态IP后&#xff0c;莫名其妙地主机名就变成了bogon&#xff0c;并且问题会稳定复现&#xff0c;就是说每次重启都会。如下图所示&#xff1a;看着不顺眼不说&#xff0c;听说可能还会影响某些服务&#xff0c;如可能导致oracle安装过程网络配置出错等问…

get 参数太长怎么办_新买的手表表带太长了该怎么办?表带调节操作方法get你~...

表表哥点击☝上方蓝字关注我们表带是手表的重要组成部分&#xff0c;同时表带决定着手表佩带的舒适性&#xff0c;方便性&#xff0c;对手表的安全也有关系。现在表带的材质也很多&#xff0c;最常见的就是不锈钢的和真皮的。买过手表的人应该都知道&#xff0c;只有是专门定制…