ZOJ 2679 Old Bill ||ZOJ 2952 Find All M^N Please 两题水题

2679:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=1679

2952:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=1951


ZOJ:2679先来~

水题大意:(题目大意:我什么时候改名了哇T T)

给你一个5位数的中间三个字母,还有一个数N让你求能被N整除的最大的五位数。

思路:

直接暴力枚举。。。。


#include<cstdio>
int num[6];
int main()
{
	int T,n;
	scanf("%d",&T);
	while(T--)
	{
		scanf("%d",&n);
		scanf("%d%d%d",&num[2],&num[3],&num[4]);
		bool ok=false;
		for(int x=9;x>=1;x--)
		{
			num[1]=x;
			for(int k=9;k>=0;k--)
			{
				num[5]=k;
				int t=1,ans=0;
				for(int i=5;i>=1;i--,t*=10)
					ans=ans+ num[i]*t;
				if(ans % n ==0)
				{
					ok=true;
					printf("%d %d %d\n",x,k,ans/n);
					goto end;
				}
			}
		}
end:;
		if(!ok)
			printf("0\n");

	}
	return 0;
}


ZOJ : 2952 

水题大意:

找出所有小于2^31能被表示为n ^m的数。

思路:

传说中的打表。

用long long 防乘法的时候直接越界了。

#include<cstdio>
#include<algorithm>
using namespace std;
typedef long long LL;
const LL N=2147483648;
const int MAXN=50000;
int len=0;
LL ans[MAXN];
int main()
{

	for(LL i=2;i*i<=N;i++)
	{
		LL temp=i;
		while(true)
		{
			temp=temp*i;
			if(temp>=N)
				break;
			ans[len++]=temp;
		}
	}
	sort(ans,ans+len);
	printf("%d\n",ans[0]);
	for(int i=1;i<len;i++)
		if(ans[i]!=ans[i-1])
			printf("%lld\n",ans[i]);
	return 0;
}


ZOJ 2679 Old Bill ||ZOJ 2952 Find All M^N Please 两题水题

上一篇:Lotto


下一篇:第5章 使用Intent和IntentFilter进行通信