您的位置:首页 > 其它

FZU 1477 进制转换

2009-07-19 09:24 267 查看
进制转化

Time Limit:1sMemory limit:32M
Accepted Submit:449Total Submit:1141
输入十进制数n(0<=n<=10000),请输出它对应的k(2<=k<=36)进制数。

10,11…分别用A, B … 代替。

输入数据

本题有多组输入数据,你必须处理到EOF为止.

每组数据占一行,有2个整数n,k

输出数据

输出n对应的k进制数,一个数一行。

输入样例

3 2
4 3
15 16

输出样例

11
11
F

Original: FOJ月赛-2007年3月

解题:

用的土方法,先判定a,b是否相等,这是特殊情况。

再取模存进数组,然后a=a/b再循环,直到a<b,最后在循环外再执行一次存储。逆序输出所需要的值。

网上有更好的方法,用的递归,网址http://blog.csdn.net/abao_/archive/2008/07/05/2615557.aspx

有些东西是需要深思。



#include <iostream>
#include <stdio.h>
using namespace std;
const int maxArray=64;
int main()
{
	int a,b,i=0;
	char number[maxArray];
	memset(number,'/0',maxArray);
 	while(cin>>a>>b)
	{
		if(a==b)
		{
			cout<<a/b*10<<endl;
			continue;
		}
		else
		{
			for(i=0;i<maxArray && a>=b;i++)
			{
				if(a%b<10)
				{
					number[i]=a%b+48;
				}
				else
				{
					number[i]=a%b+55;
				}
				a=a/b;
			}
			if(a%b<10)
			{
				number[i]=a%b+48;
			}
			else
			{
				number[i]=a%b+55;
			}
		}
		for(int j=maxArray-1;j>=0;j--)
		{
			if(number[j]=='/0')
				continue;
			cout<<number[j];
		}
		memset(number,'/0',maxArray);
		cout<<endl;
	}
	return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: