数字统计之统计页码数字出现的次数 您所在的位置:网站首页 一本书的页码里共含有88个数字8个字符 数字统计之统计页码数字出现的次数

数字统计之统计页码数字出现的次数

2024-06-28 20:14| 来源: 网络整理| 查看: 265

给定一个十进制整数N,求出从1到N的所有整数中出现"1"的个数。 例如:N=2,1,2出现了1个"1"。 N=12,1,2,3,4,5,6,7,8,9,10,11,12。出现了5个"1"。

最直接的方法就是从1开始遍历到N,将其中每一个数中含有"1"的个数加起来,就得到了问题的解。

long CountOne3(long n) { long i = 0,j = 1; long count = 0; for (i = 0; i =1,它就包含一个"1";n 1) count = count + (before + 1) * i; else if (current == 0) count = count + before * i; else if(current == 1) count = count + before * i + after + 1; i = i * 10; } return count; }

基于归纳总结,设范围是1~N,统计数字1出现的次数,介绍如下: i)当N的中间某位为0,则某位出现1的个数CNT = 其高位数字×当前的位数    如N=12013,百位为0,则百位出现1的CNT = 12 × 100(百位),分别为100~199,1100~1199,2100~2199,...,11100~11199

ii)当N的中间某位为1,则某位出现1的个数CNT = 其高位数字×当前的位数 + (低位数字+1)   如N=12113,百位为1,则百位出现1的个数CNT = 12×100 + (113+1),分别为100~199,1100~1199,2100~2199,...,11100~11199,还有12100~12113

iii)当N的中间某位>1,则某位出现1的个数CNT = (高位+1)×当前位数   如12213,CNT = (12+1)×100,分别为100~199,1100~1199,2100~2199,...,11100~11199,12100~12199

此方法的缺点是,如果统计的是数字0出现的次数,并不能正确计算,因此只适用于1~9的统计。0需要单独归纳

ULONGLONG Sumls(ULONGLONG N) { ULONGLONG iCount = 0; ULONGLONG iFactor = 1; ULONGLONG iLowerNum = 0; ULONGLONG iCurrNum = 0; ULONGLONG iHigherNum = 0; while (N/iFactor != 0) { iLowerNum = N - (N/iFactor)*iFactor; iCurrNum = (N/iFactor) % 10; iHigherNum = N / (iFactor*10); switch (iCurrNum) { case 0: iCount += iHigherNum*iFactor; break; case 1: iCount += iHigherNum*iFactor + (iLowerNum+1); break; default: iCount += (iHigherNum+1) * iFactor; break; } iFactor *= 10; } return iCount; }

字统计之统计页码

问题描述: 一本书的页码从自然数1开始计数,直到自然数n。书的页码按照通常的习惯编排,每个页码都不包含多余的前导数字0。例如,第6页用数字6表示,而不是06或006等。数字计数问题要求对给定书的总页码n,计算出书的全部页码中分别用到多少次数字0,1,2,...,9。 参考代码: 方法一  暴力求解。无论页码是多少都是从1...n,所以我们可以从1到n进行遍历并对每个数进行分解即可得到结果

#include int main() { int n,i,temp; //声明并且初始化数组 int count[10]= {0}; printf("请输入页码:"); scanf("%d",&n); //从1到n遍历数字,并分解将对应数字加1 for(i=1; i0; temp/=10) { count[temp%10]++; } } //遍历输出 for(i=0; i


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有