Online JudgeProblem SetAuthorsOnline ContestsUser
Web Board
Home Page
F.A.Qs
Statistical Charts
Problems
Submit Problem
Online Status
Prob.ID:
Register
Update your info
Authors ranklist
Current Contest
Past Contests
Scheduled Contests
Award Contest
User ID:
Password:
  Register

关于这一题的做法及代码

Posted by 0810311106 at 2009-08-12 19:32:00 on Problem 3027
这一题输入的数据全为十进制的数,包括输入的范围也是。对于一个在范围内的十进制数i,将它转化为B1进制后的数s,将s乘以某一整数倍后转换成“B2进制”的数同样为s。那么这个数i就是要输出的结果。(看错的注意看题,题目中说了输入的全为十进制。而原文示例中只不过将一个十进制拿来用而已,而省略了转换过程,请不要被误导)

以下为我写的代码,若有改进,请贴出共同分享:

#include"stdio.h"
#include"string.h"
#include"stdlib.h"
int main()
{
	int n;
	scanf("%d",&n);
	while(n--)
	{
		int a,b;
		char c[100][5];
		int min,max;
		int i,j,temp,k;
		char ji[101][5];
		for(i=0;i<=100;i++)/*表示进制数的每一位,用字符串存。如“11”代表进制数的某“一”位为“11”*/
		sprintf(ji[i],"%d",i);/*将数字i转换为字符串存入ji[i]中*/
		scanf("%d%d%d%d",&a,&b,&min,&max);
		for(i=ma-1;i>mi;i--)
		{
			k=i;
			j=0;
			while(k!=0)/*进制转换*/
			{
				temp=k%a;/*求余*/
				strcpy(c[j],ji[temp]);/*将求余的余数顺序存入c[j]中,
				代表转换后的a进制的每一位*/
			    j++;
			    k/=a;
			}
			temp=0;
			for(k=j-1;k>=0;k--)
			temp=temp*b+atoi(c[k]);/*将应的b进制转换成十进制*/
			if(temp%i==0)/*叛断是否符合条件*/
			{
				printf("%d\n",i);
				break;
			}
		}
		if(i<=mi)/*不符合条件*/
		printf("Non-existent.\n");
	}
	return 0;
}

Followed by:

Post your reply here:
User ID:
Password:
Title:

Content:

Home Page   Go Back  To top


All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator