为啥下面的能过,上面的超时,佬佬救救
查看原帖
为啥下面的能过,上面的超时,佬佬救救
701798
cxkssss678楼主2022/10/22 14:54
#include<stdio.h>
#define MAX 1000005
int  main()
{
	int N[MAX] = { 0 };
	int i = 0;
	int s = 1,k=0,sum=0;
	while (++i)
	{
		for (int j = 1; j <= i; j++)
		{
			if (s < 10)
			{
				sum += s;
				N[k++] = sum;
				if (k >= 1e6) break;
			}
			else
			{
				int S[100] = { 0 },t=0,r=s;
				while (r == 0)
				{
					S[t++] = r % 10;
					r = r / 10;
				}
				for (int m = t-1; m >=0; m--)
				{
					sum += S[m];
					N[k++] = sum;
					if (k >= 1e6) break;
				}
			}
			if (k >= 1e6) break;
		}
		if (k >= 1e6) break;
		s++;
	}
	int n;
	scanf("%d", &n);
	int l, r;
	for (int i = 0; i < n; i++)
	{
		scanf("%d %d", &l, &r);
		printf("%d\n", N[r-1]-N[l-2]);
	}
	return 0;
}

#include<stdio.h>
#define MAX 1000005
int  main()
{
	int N[MAX] = { 0 };
	int i = 0;
	int m=0,sum=0;
	while (++i)
	{
		int S[10000] = { 0 };
		int r = i,t=0;
		while (r != 0)
		{
			S[t++] = r % 10;
			r = r / 10;
		}
		for (int j = 1; j <= i; j++)
		{
			for (int k = t - 1; k >= 0; k--)
			{
				sum += S[k];
				N[m++] = sum;
				if (m >= 1e6) break;
			}
			if (m >= 1e6) break;
		}
		if (m >= 1e6) break;
	}
	int n;
	scanf("%d", &n);
	int l, r;
	for (int i = 0; i < n; i++)
	{
		scanf("%d %d", &l, &r);
		printf("%d\n", N[r-1]-N[l-2]);
	}
	return 0;
}
2022/10/22 14:54
加载中...