首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

标题1140: 进制转换

2013-03-22 
题目1140: 进制转换题目描述将M进制的数X转换为N进制的数输出。 输入输入的第一行包括两个整数:M和N(2M,N

题目1140: 进制转换

题目描述

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

 
输入

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

 
输出

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

 
样例输入
10 2
11
 
样例输出
1011
 
提示 [+]

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

 
来源

2008年清华大学计算机研究生机试真题

 
注意:

      (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 - 9if(str[i] >= '0' && str[i] <= '9'){num[i] = str[i] - '0';}//a - Zelse if(str[i] >= 'a' && str[i] <= 'z'){num[i] = (str[i] - 'a' + 10);}//A - Zelse{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;//去掉商前缀0i = 0;while(i < L && ans[i] == 0){i++;}//商复制到numk = 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;}



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




热点排行