您的位置:首页 > 其它

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

2012-07-29 21:34 399 查看
题目分析: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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: