欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

《算法笔记》3.5小节——入门模拟->进制转换 问题 B: 数制转换

程序员文章站 2024-03-18 18:07:28
...

题目描述

求任意两个不同进制非负整数的转换(2进制~16进制),所给整数在long所能表达的范围之内。
不同进制的表示符号为(0,1,…,9,a,b,…,f)或者(0,1,…,9,A,B,…,F)。

输入

输入只有一行,包含三个整数a,n,b。a表示其后的n 是a进制整数,b表示欲将a进制整数n转换成b进制整数。a,b是十进制整数,2 =< a,b <= 16。

输出

可能有多组测试数据,对于每组数据,输出包含一行,该行有一个整数为转换后的b进制数。输出时字母符号全部用大写表示,即(0,1,…,9,A,B,…,F)。

样例输入 Copy

4 123 10

样例输出 Copy

27
提示
用字符串存储和表示不同进制的数。

代码

初出茅庐,请多指教!

#include<stdio.h>
#include<string.h>

int main(){
	char num[200];
	int a,b;
	while(scanf("%d%s%d",&a,num,&b)!=EOF){
		if(num[0]=='-'){
			printf("n can not be negative!\n");
			break;
		}
		if(a<2||a>16||b<2||b>16){
			printf("a or b error!\n");
			break;
		}
		
		//将n[]转为10进制数
		int len=strlen(num);		
		long c=0;
		int product=1;
		for(int i=len-1;i>=0;i--){
			if(num[i]>='0'&&num[i]<='9'){
				c=c+(num[i]-'0')*product;
				product=product*a;
			} 
			else if(num[i]>='a'&&num[i]<='f'){
				c=c+(num[i]-'a'+10)*product;
				product=product*a;	
			}
			else if(num[i]>='A'&&num[i]<='F'){
				c=c+(num[i]-'A'+10)*product;
				product=product*a;	
			}  
		}
		//printf("c=%ld\n",c);	 
		
		
		//将y转为b进制数 		
		char m[200];
		int nm=0;
		do{
			if(c%b<=9){
				m[nm++]=c%b+'0';
			}
			else m[nm++]=c%b-10+'A';
			c=c/b;
		}while(c!=0);
		
		for(int i=nm-1;i>=0;i--){
			printf("%c",m[i]);
		}
		printf("\n");	 
	}
	return 0;
} 


相关标签: 算法