1942 Problem B:数制转换

原创 2018年04月16日 13:17:27

题目描述

求任意两个不同进制非负整数的转换(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)。

样例输入

4 123 10

样例输出

27

提示

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

思路:

通过字符串读取a进制数,将其中的小写字母先转换为大写字母,再将其转换为相应的数字,计算出十进制下的结果;

通过除基取余转化为b进制,要将具体数字转化为字符型;最终从高位输出;

代码如下:

#include <cstdio>
#include <cstring>

char ans[40], n[40];

int main()
{
	long long a, b;
	int temp, len;
	while (scanf ("%lld %s %lld", &a, n, &b) != EOF) {
		int sum = 0;
		int len = strlen (n);								    //确定字符个数; 
		for (int i = 0; i < len; i++) {						
			if (n[i] >= 'a')		n[i] = n[i] - 32;				//小写字母转化为大写; 
		  	temp = (n[i] >= 'A' ? n[i] - 'A' + 10 : n[i] - '0'); 	//转化为对应数字;		
			sum = sum * a + temp;		
		}
		
		int count = 0;
		do {
			if (sum % b <= 9)		ans[count++] = sum % b + '0';			//对结果进行修正; 
			else					ans[count++] = sum % b + 'A' - 10;
			sum = sum / b;
		}	while (sum != 0);
		
		for (int i = count - 1; i >= 0; i--) {					        	//高位输出; 
			printf ("%c", ans[i]);    
			if (i == 0) 	printf ("\n");
		}
	}
	
 	return 0;
}

1942 Problem B 数制转换

1942: 数制转换 时间限制: 1 Sec 内存限制: 32 MB 献花: 165 解决: 63 [献花][花圈][TK题库] 题目描述 求任意两个不同进制非负整数的转换(2进制~16...
  • fantasydreams
  • fantasydreams
  • 2018-01-12 17:04:37
  • 67

(数论)进制转换二(将a进制换成b进制)

数制转换这类题解法很固定,常见的就两种,昨天是第一种,今天是第二种。 题目:进制转换 时间限制:1 秒 内存限制:32 兆 题目描述:     求任意两个不同进制非负整数的转换(2进制~16进制),所...
  • kobebryantlin0
  • kobebryantlin0
  • 2017-02-12 18:42:57
  • 410

oj题目回顾(1942)C语言习题5.19--进制转换

问题及代码 Description 输入一个十进制数N,将它转换成R进制数输出。 Input 输入数据包含多个测试实例,每个测试实例包含两个整数N(32位整数)和R(210)。 ...
  • mcp3128
  • mcp3128
  • 2016-12-22 16:59:39
  • 371

代码练习系列:问题 B 数制转换

题目描述 求任意两个不同进制非负整数的转换(2进制~16进制),所给整数在long所能表达的范围之内。 不同进制的表示符号为(0,1,…,9,a,b,…,f)或者(0,1,…,9,A,B,…,F)...
  • hanzy88
  • hanzy88
  • 2017-11-08 16:23:18
  • 74

九度OJ 1118 数制转换(a进制 -> b进制)

原题地址http://ac.jobdu.com/problem.php?pid=1118 输入a进制数n,转为对应b进制的数。 解题思路一道水题。 进制转换的问题以前大一学C语言的时候就做过,这...
  • lecholin
  • lecholin
  • 2017-04-24 22:35:44
  • 250

POJ NOI0113-01 数制转换(Bailian2710)【进制】

问题链接:POJ NOI0113-01 数制转换。 总时间限制: 1000ms内存限制: 65536kB 描述 求任意两个不同进制非负整数的转换(2进制~16进制),所给整数在long所能表...
  • tigerisland45
  • tigerisland45
  • 2017-04-09 05:22:02
  • 655

数制转换(ACM俱乐部题号:1942)

题目描述:求任意两个不同进制非负整数的转换(二进制到十六进制),所给整数在long所能表达的范围之内。不同进制的表示符号为(0,1,...,9,a,b,...,f)或者(0,1,...,9,A,B,....
  • bspider0809
  • bspider0809
  • 2018-02-08 10:55:44
  • 13

数制转换(栈的应用)

问题描述:  将一个非负的十进制整数N转换为另一个等价的基为B的B进制数的问题,很容易通过"除B取余法"来解决。...
  • chenglove1314
  • chenglove1314
  • 2014-08-09 15:59:32
  • 754

杭电1002 a+b problem2

A + B Problem II Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)...
  • xd15010130025
  • xd15010130025
  • 2016-02-27 21:52:23
  • 1031

hduoj1000(A+B Problem)

#include main() {     int a,b;     while(scanf("%d%d",&a,&b)!=EOF)     {     printf("%d\n",a+b);   ...
  • bestxyj
  • bestxyj
  • 2014-07-21 22:12:44
  • 287
收藏助手
不良信息举报
您举报文章:1942 Problem B:数制转换
举报原因:
原因补充:

(最多只允许输入30个字)