30.在从 1 到 n 的正数中 1 出现的次数(数组)
题目:输入一个整数 n,求从 1 到 n 这 n 个整数的十进制表示中 1 出现的次数。
例如输入 12,从 1 到 12 这些整数中包含 1 的数字有 1, 10, 1 1 和 12, 1 一共出现了 5 次。

思路:
如1121
判断 千位 1出现了多少次:10000 有 0 个 有0个完整的 1000次千位 1, 千位数为1,说明本次千位还没有走完 后面的数字为 121 说明本次千位1走了 122个
判断 百位 1出现了多少次:1000 有 1 个 有1个完整的 100次百位 1, 百位数为1,说明本次百位还没有走完 后面的数字为 21 说明本次百位1走了 22个
判断 十位 1出现了多少次:100 有 11 个 有11个完整的 10次十位 1, 十位数为2,说明本次十位走完了 再加10个1
判断 个位 1出现了多少次:10 有 112 个 有112个完整的 1次十位 1, 个位数为2,说明本次个位走完了 再加1个1
共有 122 + 100 * 1 + 22 + 10 * 11 + 10 + 1 * 112 + 1 个1

#include <stdio.h>
#include <math.h> int getNumofOne(int N)
{
int num = ; //1出现的次数 int surplus = ; //对于每一位数字剩余的部分
int times = ;
for(times = ; N / int(pow(10.0, times)) != ; times++)
{
surplus = N % int(pow(10.0, times + ));
num += (N /int(pow(10.0, times + ))) * int(pow(10.0, times)); //一定要舍弃小数点后的数字
if ((surplus / int(pow(10.0, times))) > )
{
num += int(pow(10.0, times));
}
else if((surplus / int(pow(10.0, times))) == )
{
num += surplus % int(pow(10.0, times)) + ;
}
} return num;
} int main()
{ int n = getNumofOne();
return ;
}

网上看答案,发现大家的思路跟我的都是一样的就是具体的实现过程不大相同。他们有一个共同的特点就是没有用pow函数,值得学习!

http://www.cnblogs.com/GoAhead/archive/2012/05/28/2521415.html 中的实现

#include <stdio.h>
int test(int a){
int i;
int num=;
if(a==)
return ;
for(i=;i<=a;i++)
num*=;
return num;
}
int function(int a){
int p=a;
int num=;
int N=;
int temp;
int i;
while(p!=)
{
p=p/;
N++;
}
p=a;
for(i=;i<=N;i++){
num+=p/test(i)*test(i-);
temp=a/test(i-)%;
if(temp==)
num+=a%test(i-)+;
if(temp>)
num+=test(i-);
}
return num;
} void main(){
printf("%d\n",function());
}

http://blog.csdn.net/zz198808/article/details/7588335 里的实现

// 1Count.cpp : 定义控制台应用程序的入口点。
// #include "stdafx.h"
#include <iostream>
#include <windows.h>
using namespace std; LONGLONG Sum1s( ULONGLONG n )
{
ULONGLONG iCount = ;
ULONGLONG iFactor = ; ULONGLONG iLowerNum = ;
ULONGLONG iCurrNum = ;
ULONGLONG iHigherNum = ; while( n / iFactor != )
{
iLowerNum = n - ( n / iFactor ) * iFactor;
iCurrNum = (n / iFactor ) % ;
iHigherNum = n / ( iFactor * ); switch( iCurrNum )
{
case :
iCount += iHigherNum * iFactor;
break;
case :
iCount += iHigherNum * iFactor + iLowerNum + ;
break;
default:
iCount += ( iHigherNum + ) * iFactor;
break;
} iFactor *= ;
}
return iCount;
} int main()
{
cout << Sum1s()<<endl;
system("pause");
return ;
}

【编程题目】在从 1 到 n 的正数中 1 出现的次数的更多相关文章

  1. OJ——华为编程题目:输入字符串括号是否匹配

    package t0815; /* * 华为编程题目:输入字符串括号是否匹配 * 若都匹配输出为0,否则为1 * 样例输入:Terminal user [name | number (1)] * 样例 ...

  2. php实现 提取不重复的整数(编程题目能够最快的熟悉函数)

    php实现 提取不重复的整数(编程题目能够最快的熟悉函数) 一.总结 一句话总结:编程题目能够最快的熟悉函数. 1.字符串反转函数? 没有str_revserse,有arr_reverse,这里是st ...

  3. 网易云课堂_C++程序设计入门(下)_期末考试_期末考试在线编程题目

    期末考试在线编程题目 返回考试   本次考试题目一共两个,在考试期间可以不限制次数地提交 温馨提示: 1.本次考试属于Online Judge题目,提交后由系统即时判分. 2.学生可以在考试截止时间 ...

  4. 剑指offer算法编程题目部分汇总(解法略)

    总结一下本书中遇到的大部分面试题.面试题3:二维数组中的查找 题目:在一个二维数组中,每一行都按照从左到右的递增顺序排列,每一列都按照从上到下递增的顺序排列,请完成一个函数,输入这样的一个整数,判断数 ...

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

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

  6. 题目1373:整数中1出现的次数(从1到n整数中1出现的次数)

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

  7. 编程算法 - 从1到n整数中1出现的次数 代码(C)

    从1到n整数中1出现的次数 代码(C) 本文地址: http://blog.csdn.net/caroline_wendy 题目: 输入一个整数n, 求从1到n这n个整数的十进制表示中1出现的次数. ...

  8. [Jobdu] 题目1373:整数中1出现的次数(从1到n整数中1出现的次数)

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

  9. 九度oj 题目1373:整数中1出现的次数(从1到n整数中1出现的次数)

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

随机推荐

  1. WCF binding的那些事!!!

    原文地址:http://www.cnblogs.com/Anima0My/archive/2008/04/16/1156146.html WCF中常用的binding方式: BasicHttpBind ...

  2. 你真的懂了R中的stem函数是如何绘制茎叶图的么?

    本文原创,转载请注明出处,本人Q1273314690(交流学习)   哭晕 你真的学会了stem()函数了吗? stem()函数的使用方法是: stem(x, scale=1,width=80, at ...

  3. AlwaysOn可用性组功能测试(一)--AlwaysOn故障转移测试

    具体测试环境请参考: AlwaysOn可用性组测试环境安装与配置(一)--SQL群集环境搭建 AlwaysOn可用性组测试环境安装与配置(二)--AlwaysOn配置(界面与T-SQL) 一. Alw ...

  4. 【bzoj4034】[HAOI2015]树上操作

    题目描述 有一棵点数为 N 的树,以点 1 为根,且树点有边权.然后有 M 个 操作,分为三种: 操作 1 :把某个节点 x 的点权增加 a . 操作 2 :把某个节点 x 为根的子树中所有点的点权都 ...

  5. MFC中CString转化为char*

    char* convertCStringToChars(CString string) { int nLength=string.GetLength(); ]; memset(c,,nLength+) ...

  6. iOS中AOP与Method Swizzling 项目中的应用

    引子:项目中需要对按钮点击事件进行统计分析,现在项目中就是在按钮的响应代码中添加点击事件,非常繁琐.所以使用了AOP(面向切面编程),将统计的业务逻辑统一抽离出来. 项目中添加的开源库:https:/ ...

  7. BZOJ1455——罗马游戏

    1.题目大意:维护一个数据结构,可以实现合并操作,还能询问最小值 2.分析:这种问题当然是可并堆啦 随便写了一个左偏树QAQ #include <cstdio> #include < ...

  8. windows下vim编辑器,字符编码设置。

    在windows下的vim默认字符集修改 之前使用vim编辑器的时候碰到乱码的问题,后来在网上看了记下了:在vim编辑器中按esc进入命令模式 1.修改vim内部编码    set encoding= ...

  9. Qt5.5.1 学习笔记

    添加图标(.pro): RC_ICONS = 1.ico    RC_FILE = 1.rc 新建 1.rc 内容:IDI_ICON1 ICON "1.ico" 支持c++11(. ...

  10. COGS 2421.[HZOI 2016]简单的Treap 题解

    题目大意: 给定n个数及其优先级,求对应的符合最小堆性质的Treap的先序遍历. n<=500000. 解法: 目前为止我只想到了三种解法,其中第三种是正解. 1.暴力1 以优先级为关键字排序, ...