现在的位置: 首页 > 综合 > 正文

zoj 3622 Magic Number (找规律+打表)

2017年11月15日 ⁄ 综合 ⁄ 共 1050字 ⁄ 字号 评论关闭

题目分析:X为任意正数,正数Y,满足(X*10^y+Y)%Y=0,数Y被称为magic number。找出M~N之间的所有magic number。1~10^4之间的magic number的数字有:1, 2, 5,10,  20,  25,  50,100,  125,  200, 250, 500,  1000, 1250, 2000,   2500,  5000 

规律就出来了,,,其他的都是125,200,250,500乘以10^i.........


代码:

#include<iostream>
#include<cstdio>
#include<cmath>
using namespace std;

long long  arr[10000];
const int MAX=1<<31-1;//2<<31-1...脑残了
int main()
{
	int m,n;
	while(scanf("%d %d",&m,&n)!=EOF)
	{
		int a1=100,a2=125,a3=200,a4=250,a5=500,num=7;
        arr[0]=1,arr[1]=2,arr[2]=5;
	    arr[3]=10,arr[4]=20,arr[5]=25,arr[6]=50;
		//printf("MAX=%d\n\n",MAX);
		long long temp;
		for(int i=0;i<=7;i++)
		{
			temp=(long long)pow(10.0,i*1.0);
			arr[num++]=a1*temp;
			arr[num++]=a2*temp;
			arr[num++]=a3*temp;
			arr[num++]=a4*temp;
			arr[num++]=a5*temp;
			if(arr[num-1]>MAX)
				break;
		}
		/*for(int i=0;i<num;i++)
			printf("%d   ",arr[i]);*/
		int start=-10,end=-10,ans=0;
		for(int i=0;i<num;i++)
		{
            if(start==-10)
			{
				if(arr[i]==m)
				{
				     start=i-1;
				     //printf("start=%d\n\n",start);
				}
				else if(arr[i]>m)
					start=i-1;
					 
			}
			if(end==-10)
			{
				if(arr[i]==n)
				{
				      end=i+1;
				     // printf("end=%d\n\n",end);
				}
				else if(arr[i]>n)
					end=i;
			}
		}
		ans=end-start-1;
        printf("%d\n",ans);
	}
	//system("pause");
	return 0;
}

抱歉!评论已关闭.