C++实现页码数字统计

#include<iostream>
#include<iomanip>
#include<cstdlib>
#include<ctime>
#include<cmath>
#include<vector>
#include<map>
#include<algorithm>
#include<string>
#include<sstream>

using namespace std;

int Str2Int(const string & s, int st, int ed)
{
	int n = 0;
	for (int i = st; i < ed; ++i) {
		n = n * 10 + s[i]- '0';
	}
	return n;
}

int pos_power(int base, int ind) {
	int res = 1;
	for (int i = 0; i < ind; ++i)
		res *= base;
	return res;
}

int Count2(int n) {
	int cnt = 0;
	int ord = 0;

	for (ord = 0; n / pos_power(10, ord) > 0; ++ord) {
		int bit = n / pos_power(10, ord) % 10;

		cnt += bit*ord* pos_power(10, ord-1);

		if (bit > 2)
			cnt += pos_power(10, ord);
		else if (bit == 2)
			cnt += n % pos_power(10, ord) + 1;
	}

	return cnt;
}

int main(void) {
	int L, R;
	while (cin >> L >> R) {
		//cout << Count2(R) << endl;
		//cout << Count2(R) << " " << Count2(L - 1) << endl;
		cout << (Count2(R) - Count2(L - 1)) << endl;
	}
	return 0;
}


參考链接: <a target=_blank href="http://www.cppblog.com/AllKillMan/archive/2011/08/18/153798.html">http://www.cppblog.com/AllKillMan/archive/2011/08/18/153798.html</a>
时间: 2024-11-11 05:28:22

C++实现页码数字统计的相关文章

数字统计问题

1.      一本书的页码从自然数1开始顺序编码直到自然数n.书的页码按照通常的习惯编排,每个页码都不含多余的前导数字0.例如第6页用6表示而不是06或006.数字统计问题要求对给定书的总页码,计算出书的全部页码中分别用到多少次数字0,1,2,3,.....9. 思路:对于n位数,例如3位数,000-999,出现0,1,2...9的次数相同,记每个数字出现的次数为avg,这10个数字出现的总次数为sum=10*avg. 而n位数共有10^n个数,每个具体的数对于sum的贡献为n次. 得到:10

zznu 1255 数字统计(数位DP, 数学方法)

最近在学数位DP, 感觉还是满有收获的! 做了几个题之后想起来自己OJ上曾经做的一道题,以前是用数学方法写的,现在改用数位DP来写了一遍. 题目: 1255: 数字统计 时间限制: 1 Sec  内存限制: 128 MB提交: 31  解决: 4[提交][状态] 题目描述 一本书的页码从自然数1 开始顺序编码直到自然数n.书的页码按照通常的习惯编排, 每个页码都不含多余的前导数字0.例如,第6 页用数字6 表示,而不是06 或006 等.数 字计数问题要求对给定书的总页码n,计算出书的全部页码中

数字统计(LeetCode Number of digit One)

1.      一本书的页码从自然数1开始顺序编码直到自然数n.书的页码按照通常的习惯编排,每个页码都不含多余的前导数字0.例如第6页用6表示而不是06或 006.数字统计问题要求对给定书的总页码,计算出书的全部页码中分别用到多少次数字0,1,2,3,.....9. 思路:对于n位数,例如3位数,000-999,出现0,1,2...9的次数相同,记每个数字出现的次数为avg,这10个数字出现的总次数为sum=10*avg. 而n位数共有10^n个数,每个具体的数对于sum的贡献为n次. 得到:1

SDUT OJ 1704 数字统计问题

SDUT OJ 1704 数字统计问题 博客原文地址:http://blog.csdn.net/xuechelingxiao/article/details/40930259 昨天晚上学弟问了OJ上这个题,群里说不清楚,就写个解题报告吧. 题目大意: 中文题目,就不翻译了-.- 解题思路: 不知道算不算一个典型的数位DP,反正有点那个意思,感觉确实也可以用记忆话搜索,两个差不多的意思. 我找了一下,这个问题好像是算法设计与实验题解上面的一道题,别的OJ上没有,所以就在自己OJ上做了. 大体的思路

数字统计(0)&lt;P2010_1&gt;

数字统计   (two.pas/c/cpp) [问题描述] 请统计某个给定范围[L, R]的所有整数中,数字 2 出现的次数.  比如给定范围[2, 22],数字 2 在数2中出现了 1次,在数 12中出现 1 次,在数 20 中出现 1 次,在数 21 中出现 1 次,在数 22 中出现 2 次,所以数字 2 在该范围内一共出现了 6次.  [输入] 输入文件名为 two.in.  输入共 1 行,为两个正整数 L 和 R,之间用一个空格隔开.  [输出] 输出文件名为 two.out.  输

一款纯css3实现的数字统计游戏

今天给大家分享一款纯css3实现的数字统计游戏.这款游戏的规则的是将所有的数字相加等于72.这款游戏的数字按钮做得很美观,需要的时候可以借用下.一起看下效果图: 在线预览   源码下载 实现的代码. html代码: <h1> CSS Counter Game</h1> <section> <h2> Pick the numbers that add up to 72:</h1> <input id="a" type=&q

AC日记——数字统计 openjudge 1.5 41

41:数字统计 总时间限制:  1000ms 内存限制:  65536kB 描述 请统计某个给定范围[L, R]的所有整数中,数字2出现的次数. 比如给定范围[2, 22],数字2在数2中出现了1次,在数12中出现1次,在数20中出现1次,在数21中出现1次,在数22中出现2次,所以数字2在该范围内一共出现了6次. 输入 输入共 1 行,为两个正整数 L 和 R,之间用一个空格隔开. 输出 输出共 1 行,表示数字 2 出现的次数. 样例输入 样例 #1: 2 22 样例 #2: 2 100 样

[华为机试练习题]16.数字统计

题目 题目标题: 对输入的整型数组,输出数组元素中的最大值.最大值的个数.最小值和最小值的个数 详细描述: 接口说明 原型: voidOutputMaxAndMin(int * pInputInteger,intInputNum,int * pMaxValue,int * pMaxNum,int * pMinValue,int * pMinNum); 输入参数: Int * pInputInteger:整型数组指针 Int InputNum:数组元素个数 输出参数(指针指向的内存区域保证有效):

Chang&#39;an(Palindrome Numbers-回文数字统计)

统计前半个回文串 #include <bits/stdc++.h> using namespace std; #define For(i,n) for(int i=1;i<=n;i++) #define ForD(i,n) for(int i=n;i;i--) #define ForkD(i,k,n) for(int i=n;i>=k;i--) #define Rep(i,n) for(int i=0;i<n ;i++) #define MAXN (1000000000+10