从1到n整数中1出现的次数 代码(C)

本文地址: http://blog.csdn.net/caroline_wendy

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

把拆分为最高位数字, 其余数字, 最后数字求解.

21345 -> 1346-21345[10000-19999, 最高位 + 1346-x1345其余位数] + 1-1345;

代码:

/*
* main.cpp
*
* Created on: 2014年6月29日
* Author: wang
*/ #include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <limits.h> using namespace std; int PowerBase10(size_t n) {
int result = 1;
for (size_t i=0; i<n; ++i)
result *= 10;
return result;
} int NumberOf1(const char* strN) {
if (!strN || *strN<'0' || *strN>'9' || *strN == '\n')
return 0;
int first = *strN - '0';
size_t length = strlen(strN); if (length == 1 && first == 0)
return 0;
if (length == 1 && first > 0)
return 1; //最高位数字
int numFirstDight = 0;
if (first > 1)
numFirstDight = PowerBase10(length-1);
else if (first == 1)
numFirstDight = atoi(strN+1) + 1; //+1去除最高位, 在加1 //其余数字
int numOtherDights = first*(length-1)*PowerBase10(length-2); //最后剩余
int numRecursive = NumberOf1(strN + 1); return numFirstDight + numOtherDights + numRecursive;
} int NumberOf1Between1AndN (int n) {
if (n<=0)
return 0;
char strN[50];
sprintf(strN, "%d", n); return NumberOf1(strN);
} int main(void)
{
int result = NumberOf1Between1AndN(12);
printf("result = %d\n", result);
return 0;
}

输出:

result = 5

编程算法 - 从1到n整数中1出现的次数 代码(C)的更多相关文章

  1. 【剑指Offer面试编程题】题目1373:整数中1出现的次数--九度OJ

    题目描述: 亲们!!我们的外国友人YZ这几天总是睡不好,初中奥数里有一个题目一直困扰着他,特此他向JOBDU发来求助信,希望亲们能帮帮他.问题是:求出1~13的整数中1出现的次数,并算出100~130 ...

  2. JZ-031-从 1 到 n 整数中 1 出现的次数

    从 1 到 n 整数中 1 出现的次数 题目描述 求出1-13的整数中1出现的次数,并算出100-1300的整数中1出现的次数?为此他特别数了一下1~13中包含1的数字有1.10.11.12.13因此 ...

  3. 算法: 整数中1出现的次数(从1到n整数中1出现的次数)

    问题: 整数中1出现的次数(从1到n整数中1出现的次数) 问题:求出1~13的整数中1出现的次数,并算出100~1300的整数中1出现的次数? 为此他特别数了一下1~13中包含1的数字有1.10.11 ...

  4. 剑指Offer(三十一):整数中1出现的次数(从1到n整数中1出现的次数)

    剑指Offer(三十一):整数中1出现的次数(从1到n整数中1出现的次数) 搜索微信公众号:'AI-ming3526'或者'计算机视觉这件小事' 获取更多算法.机器学习干货 csdn:https:// ...

  5. 九度OJ 1373 整数中1出现的次数(从1到n整数中1出现的次数)

    题目地址:http://ac.jobdu.com/problem.php?pid=1373 题目描述: 亲们!!我们的外国友人YZ这几天总是睡不好,初中奥数里有一个题目一直困扰着他,特此他向JOBDU ...

  6. n个整数中1出现的次数

    整数中1出现的次数(从1到n整数中1出现的次数) (两种方法:1.规律.2暴力求解) 题目描述 求出1 ~ 13的整数中1出现的次数,并算出100 ~ 1300的整数中1出现的次数?为此他特别数了一下 ...

  7. 《剑指offer》面试题32----从1到n整数中1出现的次数

    题目:输入一个整数n,求从1到n这n个整数的十进制表示中1出现的次数.例如输入12,从1到12这些整数中包含1的数字有1,10,11和12,1一共出现了5次. 解法一:不考虑时间效率的解法(略) ps ...

  8. 整数中1出现的次数(从1到n整数中1出现的次数)

    整数中1出现的次数(从1到n整数中1出现的次数) 题目描述 求出1 ~ 13的整数中1出现的次数,并算出100 ~ 1300的整数中1出现的次数?为此他特别数了一下1 ~ 13中包含1的数字有1.10 ...

  9. 【剑指Offer】31、从1到n整数中1出现的次数

      题目描述:   求出1~13的整数中1出现的次数,并算出100~1300的整数中1出现的次数?为此他特别数了一下1~13中包含1的数字有1.10.11.12.13因此共出现6次,但是对于后面问题他 ...

随机推荐

  1. [BZOJ4340][BJOI2015]隐身术(后缀数组)

    考虑到K很小,于是可以暴搜每次用的是哪种操作,跳过AB相等的字符可以用SA求LCP加速. 主要流程就是,枚举B的每个后缀,对每个后缀统计合法前缀个数.DFS搜索每次决策,用SA跳过相同字符,当A或B匹 ...

  2. [HDU5492]Find a path

    题目大意: 一个n*m的格子,每个格子上都有一个数. 你可以向下或者向右走,从(1,1)走到(n,m),问方差*(n+m-1)最小的路径是哪个? 思路: 方差*(n+m-1)就相当于给格子里每个数乘上 ...

  3. Redis 锁的实现方案

    开发中不可避免的是碰到并发请求,在数据严谨性的要求不高时,我们也不需要做什么处理,但如果碰到数据严谨性非常高的时候(例如:用户金额,秒杀产品的库存...),我们就需要慎重处理了. 解决方案多种多样,下 ...

  4. JBoss 7 配置成windows启动服务

    将Jboss7 server 配置成一个windows启动服务的两个文件,部署步骤如下: 1.    先检查是否配置java_home和jboss_home的环境变量,如没配置上先配置,如我的是JBO ...

  5. Rails -- 自动清除日志

    在开发模式中,开发环境日志会越来越大,所以需要设置自动清理,省内存. 在 config/initializers中新建一个文件 clear_blog.rb 编写如下代码 if Rails.env.de ...

  6. Codeforces Round #202 (Div. 1) A. Mafia 贪心

    A. Mafia Time Limit: 20 Sec  Memory Limit: 256 MB 题目连接 http://codeforces.com/contest/348/problem/A D ...

  7. Nagios 监控mysqlserver具体实现过程

    ,之后在页面就能够看到监控效果了 參考文章:http://os.51cto.com/art/201409/452605.htm

  8. Papilio Pro Boards

    http://papilio.cc/index.php?n=Papilio.PapilioOne The Papilio is an Open Source FPGA development boar ...

  9. [转]如何在Windows Server 2012中安装.Net Framework 3.5?

    http://www.cnblogs.com/westsource/archive/2012/12/26/2834876.html If you have Windows Server 2012 is ...

  10. 自己定义AlertDialog对话框布局

    自己定义对话框中的信息body布局 LayoutInflater inflater =getLayoutInflater(); View layout = inflater.inflate(R.lay ...