NYOJ 648 数字1的数量

数字1的数量

时间限制:1000 ms  |  内存限制:65535 KB

难度:1

描述

给定一个十进制正整数N,写下从1开始,到N的所有正数,计算出其中出现所有1的个数。

例如:n = 12,包含了5个1。1,10,12共包含3个1,11包含2个1,总共5个1。

输入
输入N(0 <= N <= 10^9)

多组测试数据

输出
输出包含1的个数
样例输入
12
样例输出
5
点击打开链接
AC码:
#include<stdio.h>
int fun(int n)
{
	if(n<1)
		return 0;
	int sum=0,t=n,p=1;
	while(n>0)
	{
		if(n%10==0)
			sum+=n/10*p;
		else if(n%10==1)
		{
			if(n==t)
				sum+=n/10*p+1;
			else
			{
				sum+=n/10*p+t%p+1;
			}
		}
		else
			sum+=(n/10+1)*p;
		n/=10;
		p*=10;
	}
	return sum;
}
int main()
{
	int n;
	while(~scanf("%d",&n))
	{
		printf("%d\n",fun(n));
	}
	return 0;
}

NYOJ 648 数字1的数量,码迷,mamicode.com

时间: 2024-12-15 01:58:03

NYOJ 648 数字1的数量的相关文章

[51 nod]1009 数字1的数量

1009 数字1的数量 基准时间限制:1 秒 空间限制:131072 KB 分值: 5 难度:1级算法题 给定一个十进制正整数N,写下从1开始,到N的所有正数,计算出其中出现所有1的个数. 例如:n = 12,包含了5个1.1,10,12共包含3个1,11包含2个1,总共5个1. Input 输入N(1 <= N <= 10^9) Output 输出包含1的个数 Input示例 12 Output示例 5详解请看大牛博客:http://www.cnblogs.com/jy02414216/ar

数字0-9的数量

数字0-9的数量 基准时间限制:1 秒 空间限制:131072 KB 给出一段区间a-b,统计这个区间内0-9出现的次数. 比如 10-19,1出现11次(10,11,12,13,14,15,16,17,18,19,其中11包括2个1),其余数字各出现1次. Input 两个数a,b(1 <= a <= b <= 10^18) Output 输出共10行,分别是0-9出现的次数 Input示例 10 19 Output示例 1 11 1 1 1 1 1 1 1 1分析:数位dp做多了发现

51nod 1009 数字1的数量 数位dp

1009 数字1的数量 基准时间限制:1 秒 空间限制:131072 KB 给定一个十进制正整数N,写下从1开始,到N的所有正数,计算出其中出现所有1的个数. 例如:n = 12,包含了5个1.1,10,12共包含3个1,11包含2个1,总共5个1. Input 输入N(1 <= N <= 10^9) Output 输出包含1的个数 Input示例 12 Output示例 5 #include<bits/stdc++.h> using namespace std; #define

51nod 1042 数字0-9的数量 (数位dp、dfs、前导0)

1042 数字0-9的数量 基准时间限制:1 秒 空间限制:131072 KB 分值: 10 难度:2级算法题 收藏 关注 取消关注 给出一段区间a-b,统计这个区间内0-9出现的次数. 比如 10-19,1出现11次(10,11,12,13,14,15,16,17,18,19,其中11包括2个1),其余数字各出现1次. Input 两个数a,b(1 <= a <= b <= 10^18) Output 输出共10行,分别是0-9出现的次数 Input示例 10 19 Output示例

51nod- 【1042 数字0-9的数量 】

题目链接:https://www.51nod.com/onlineJudge/questionCode.html#!problemId=1042 题目: 1042 数字0-9的数量 基准时间限制:1 秒 空间限制:131072 KB 分值: 10 难度:2级算法题 给出一段区间a-b,统计这个区间内0-9出现的次数. 比如 10-19,1出现11次(10,11,12,13,14,15,16,17,18,19,其中11包括2个1),其余数字各出现1次. Input 两个数a,b(1 <= a <

1042 数字0-9的数量(非数位dp解法)

1042 数字0-9的数量 给出一段区间a-b,统计这个区间内0-9出现的次数. 比如 10-19,1出现11次(10,11,12,13,14,15,16,17,18,19,其中11包括2个1),其余数字各出现1次. 输入 两个数a,b(1 <= a <= b <= 10^18) 输出 输出共10行,分别是0-9出现的次数 输入样例 10 19 输出样例 1 11 1 1 1 1 1 1 1 1 题意很明确,其实只要能求的到b的就可以.然后用val(b) - val(a-1)就能得出结果

CodeVS 1359 数字计数 51nod 1042 数字0-9的数量 Pascal

题目大意: 我的代码又臭又长,但是毕竟是我这个jr想了几天才推出的公式,看别的大神都写数位DP,所以我决定分享一下我的思路.我认为我的思路一向是最好理解的! 要分两种情况讨论: 1.0的情况.我们首先推出0~9中只有1个0,在0~99中有(1+(9*100*1))个0{第一位可以为1~9,第二位可以为0~9,0只可以放在后者,所以乘1},在0~999中有((1+(9*100*1))+(9*101*2))个0~6666为例,先算出0~999中0的个数,在算出1000~5999中0的个数,则为(10

[51nod1009]数字1的数量

解题关键:数位dp,对每一位进行考虑,通过过程得出每一位上1出现的次数 1位数的情况: 在解法二中已经分析过,大于等于1的时候,有1个,小于1就没有. 2位数的情况: N=13,个位数出现的1的次数为2,分别为1和11,十位数出现1的次数为4,分别为10,11,12,13,所以f(N) = 2+4. N=23,个位数出现的1的次数为3,分别为1,11,21,十位数出现1的次数为10,分别为10~19,f(N)=3+10. 由此我们发现,个位数出现1的次数不仅和个位数有关,和十位数也有关,如果个位

51 Nod 1009 数字1的数量(数位dp)

题目链接:https://www.51nod.com/onlineJudge/questionCode.html#!problemId=1009 题目: 给定一个十进制正整数N,写下从1开始,到N的所有正数,计算出其中出现所有1的个数. 例如:n = 12,包含了5个1.1,10,12共包含3个1,11包含2个1,总共5个1. Input 输入N(1 <= N <= 10^9) Output 输出包含1的个数 Input示例 12 Output示例 5题意:中文题诶题解:我们计算每个数位上1出