题目1140: 进制转换

题目描述

将M进制的数X转换为N进制的数输出。

 

输入

输入的第一行包括两个整数:M和N(2<=M,N<=36)。
下面的一行输入一个数X,X是M进制的数,现在要求你将M进制的数X转换成N进制的数输出。

 

输出

输出X的N进制表示的数。

 

样例输入
10 2
11
 

样例输出
1011
 

提示 [+]

*** 提示已隐藏,点击上方 [+] 可显示 ***

 

来源
 

注意:

      (1) 此题为高精度进制转换

      (2)输入时如有字母,则字母为大写,输出时如有字母,则字母为小写。

【思路】:

  浅谈进制转换

/*********************************
*   日期:2013-2-19
*   作者:SJF0115
*   题号: 天勤OJ 题目1140: 进制转换
*   来源:http://acmclub.com/problem.php?id=1140
*   结果:AC
*   来源:2008年清华大学计算机研究生机试真题
*   总结:
**********************************/
#include <string.h>
#include <stdio.h>
#define MAXSIZE 1000
//输入的字符串
char str[MAXSIZE];
//被除数
int num[MAXSIZE];
//商
int ans[MAXSIZE];
//余数
int res[MAXSIZE];


//a进制转换为b进制
int Change(int a,int b){

	int L = strlen(str);
	int i,j,k,index,c;
	memset(num,0,sizeof(num));
	//字符转换为数字
	for(i = 0;i < L;i++){
		//0 - 9
		if(str[i] >= '0' && str[i] <= '9'){
			num[i] = str[i] - '0';
		}
		//a - Z
		else if(str[i] >= 'a' && str[i] <= 'z'){
			num[i] = (str[i] - 'a' + 10);
		}
		//A - Z
		else{
			num[i] = (str[i] - 'A' + 10);
		}
	}//for
	//转换
	index = 0;
	while(L){
		c = 0;
		for(i = 0;i < L;i++){
			//a进制
			c = c * a + num[i];
			//转换为b进制
			ans[i] = c / b;
			c = c % b; 
		}
		//这一轮除法得到的余数
		res[index++] = c;
		//去掉商前缀0
		i = 0;
		while(i < L && ans[i] == 0){
			i++;
		}
		//商复制到num
		k = 0;
		memset(num,0,sizeof(num));
		for(j = i;j < L;j++){
			num[k++] = ans[j];
		}
		L = k;
		memset(ans,0,sizeof(ans));
	}
	return index;
}

int main()
{
	int a,b,L;
	while(scanf("%d %d",&a,&b) != EOF){
		scanf("%s",str);
		//余数的个数
		L = Change(a,b);
		//输出(转换为字符 例如:余数为10 应该写成a)
		for(int i = L-1;i >= 0;i--){
			if(res[i] > 9){
				printf("%c",res[i] - 10 + 'a');
			}
			else{
				printf("%d",res[i]);
			}
		}
		printf("\n");
	}
    return 0;
}



可以用栈存储,参考:点击打开链接




  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值