NYOJ 514 1的个数

1的个数

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

难度:3

描述

给你两个数a和b,你的任务是计算出1在a和b之间出现的次数,比如说,如果a=1024,b=1032,那么a和b之间的数就是:

1024 1025 1026 1027 1028 1029 1030 1031 1032

则有10个1出现在这些数中。

输入
输入不会超过500行。每一行有两个数a和b,a和b的范围是0 <= a, b <= 100000000。输入两个0时程序结束,两个0不作为输入样例。
输出
对于每一对输入的a和b,输出一个数,代表1出现的个数。
样例输入
1 10
44 497
346 542
0 0
样例输出
2
185
40
十进制数中1的个数!
AC码:
#include<stdio.h>
long long solve(long long x)
{
	if(x<0)
		return 0;
	long long t=0,p=1,temp=x;
	while(x>0)
	{
		if(x%10==0)
			t+=x/10*p;
		else
		{
			if(x%10==1)
			{
				if(x==temp)
					t+=x/10*p+1;
				else
					t+=temp%p+1+x/10*p;
			}
			else
				t+=(x/10+1)*p;
		}
		x/=10;
		p*=10;
	}
	return t;
}
int main()
{
	long long a,b,t;
	while(scanf("%lld%lld",&a,&b)&&(a+b))
	{
		if(a<b)
		{
			t=a;
			a=b;
			b=t;
		}
		printf("%lld\n",solve(a)-solve(b-1));
	}
	return 0;
}

时间: 2024-08-06 11:34:46

NYOJ 514 1的个数的相关文章

NYOJ 678 最小K个数之和

最小K个数之和 时间限制:1000 ms  |  内存限制:65535 KB 难度:2 描述 输入n个整数,输出其中最小的K个数之和.例如输入4,5,1,1,6,2,7,3,3这9个数字,当k=4,则输出最小的4个数之和为7(1,1,2,3). 输入 测试样例组数不超过10 每个测试案例包括2行: 第一行为2个整数n,k(1<=k<=n<=100000) 第二行包含n个整数,每个整数的范围为[1~2000] 输出 对应每个测试案例,输出最小的k个数之和. 样例输入 8 4 5 2 1 3

nyoj 206——矩形的个数——————【dp或公式】

矩形的个数 时间限制:1000 ms  |  内存限制:65535 KB 难度:1 描述 在一个3*2的矩形中,可以找到6个1*1的矩形,4个2*1的矩形3个1*2的矩形,2个2*2的矩形,2个3*1的矩形和1个3*2的矩形,总共18个矩形. 给出A,B,计算可以从中找到多少个矩形. 输入 本题有多组输入数据(<10000),你必须处理到EOF为止 输入2个整数A,B(1<=A,B<=1000) 输出 输出找到的矩形数.  样例输入 1 2 3 2 样例输出 3 18 dp: #incl

NYOJ 100 1的个数

1的个数 时间限制:3000 ms  |  内存限制:65535 KB 难度:1 描述 小南刚学了二进制,他想知道一个数的二进制表示中有多少个1,你能帮他写一个程序来完成这个任务吗? 输入 第一行输入一个整数N,表示测试数据的组数(1<N<1000) 每组测试数据只有一行,是一个整数M(0=<M<=10000) 输出 每组测试输出占一行,输出M的二进制表示中1的个数 样例输入 3 4 6 7 样例输出 1 2 3 二进制数中1的个数! AC码: #include<stdio.

NYOJ 206 矩形的个数

#include<stdio.h>int main(){ long long m,n,t; while(~scanf("%lld%lld",&m,&n)) { t=m*(m+1)/2*n*(n+1)/2; printf("%lld\n",t); }}

NYOJ题目1001的个数

------------------------------------------- 感觉我脑洞太飘逸了...O(∩_∩)O哈哈~ 坚决不重复造轮子. AC代码: 1 import java.util.Scanner; 2 3 public class Main { 4 5 public static void main(String[] args) { 6 7 Scanner sc=new Scanner(System.in); 8 int times=sc.nextInt(); 9 whi

nyoj 数的二进制中1的个数

很有用O(n)内实现三类数字分离,以前大多是分成两类数据,快排中分成两类,还有就是"ab***vvvc" 在O(n)中变成 abvvc****,变成两类划分问题 #include<iostream> #include<string.h> using namespace std; const int N=1000; char c[N]; int len; void swap(char &a,char &b) { //a=a^b; //b=a^b;

NYOJ 1103 —— m划分为n个正整数的个数

多边形划分 时间限制:1000 ms  |  内存限制:65535 KB 描述 Give you a convex(凸边形), diagonal n-3 disjoint divided into n-2 triangles(直线), for different number of methods, such as n=5, there are 5 kinds of partition method, as shown in Figure 输入 The first line of the inp

NYOJ 90 —— 求n划分为若干个正整数的划分个数

整数划分 时间限制:3000 ms  |  内存限制:65535 KB 描述 将正整数n表示成一系列正整数之和:n=n1+n2+…+nk, 其中n1≥n2≥…≥nk≥1,k≥1. 正整数n的这种表示称为正整数n的划分.求正整数n的不 同划分个数. 例如正整数6有如下11种不同的划分: 6: 5+1: 4+2,4+1+1: 3+3,3+2+1,3+1+1+1: 2+2+2,2+2+1+1,2+1+1+1+1: 1+1+1+1+1+1.  输入 第一行是测试数据的数目M(1<=M<=10).以下每

nyoj 找球号三(除了一个数个数为基数,其他为偶数,编程之美上的)

#include<iostream> #include<stdio.h> using namespace std; int main() { int len; while(cin>>len) { int ans; len--; cin>>ans; while(len--) { int a; cin>>a; ans=ans^a; } cout<<ans<<endl; } system("pause");