蓝桥杯 BASIC-10~12 进制转化

十进制转十六进制

【AC代码】:更简单采用直接输出的方式。

#include <iostream>
#include <algorithm>
#include <cstdio>
using namespace std;

int main()
{
	//freopen("in.txt", "r", stdin);
	//freopen("out.txt", "w", stdout);
	int n = 0, cnt = 0, i = 0;
	cin >> n;
	char Hex[20];
	if (0 == n)
		cout << 0;
	while (n)
	{
		int temp = n%16;
		n = n/16;
		switch(temp)
		{
			case 0:
			case 1:
			case 2:
			case 3:
			case 4:
			case 5:
			case 6:
			case 7:
			case 8:
			case 9:
				Hex[cnt++] = temp+'0';
				break;
			case 10:
			case 11:
			case 12:
			case 13:
			case 14:
			case 15:
				Hex[cnt++] = temp-10+'A';
				break;
		}
	}
	for (i = cnt-1; i >= 0; i--)
		cout << Hex[i];
}

十六进制转十进制

【AC代码】:更简单采用直接输出的方式。

#include <iostream>
#include <algorithm>
#include <cstdio>
#include <cstring>
#include <cmath>
using namespace std;

int main()
{
	//freopen("in.txt", "r", stdin);
	//freopen("out.txt", "w", stdout);
	char Hex[20];
	gets(Hex);
	int i = 0, len = strlen(Hex);
	long long int sum = 0;
	for (i = len-1; i >= 0; i--)
	{
		if (Hex[i] >= '0' && Hex[i] <= '9')
			sum += (Hex[i]-'0') * pow(16, len-1-i);
		else
			sum += (Hex[i]-'A'+10) * pow(16, len-1-i);
	}
	cout << sum;
}

十六进制转十进制

【AC代码】:因为题目范围限制,所以不能采用直接输出的方式。

#include <iostream>
#include <algorithm>
#include <cstdio>
#include <cstring>
#include <cmath>
#include <iomanip>
using namespace std;

#define MAX 100000+10

int toNum(char c)
{
	if (c >= 'A')
		return c - 'A'+10;
	else
		return c - '0';
}

int main()
{
	//freopen("in.txt", "r", stdin);
	//freopen("out.txt", "w", stdout);
	int t = 0;
	cin >> t;
	while (t--)
	{
		char Hex[MAX];
		cin >> Hex;
		int i = 0, len = strlen(Hex);
		if (1 == len%3)
		{
			cout << oct << toNum(Hex[0]);
			i = 1;
		}
		else if (2 == len%3)
		{
			cout << oct << toNum(Hex[0])*16 + toNum(Hex[1]);
			i = 2;
		}
		for ( ; i < len; i+=3)
		{
			cout << setw(4) << setfill('0') << oct << toNum(Hex[i])*256 + toNum(Hex[i+1])*16 + toNum(Hex[i+2]);
		}
		cout << endl;
	}
}

算法:先把十六进制每三位转换成十进制,然后以八进制输出。更常用的方法是先转换成二进制,然后三位一组转换成八进制。

时间: 2024-10-05 04:45:04

蓝桥杯 BASIC-10~12 进制转化的相关文章

蓝桥杯 基础练习 16进制转10进制

#include <iostream> #include "stdio.h" #include "stdlib.h" #include "memory.h" using namespace std; /* 用math.h的pow函数 测评系统会编译错误,所以自己写个pow函数 */ //题目要求最大8位,所以可能会超过,因此用long long long long pow(int x, int y) { long long re=1;

7.10 数据类型&amp;进制转化 Day4

---note--- _ _ _ _ _ _ _ _ 最高位为符号位 8位为0-7 基本数据类型: 整型:int short int long int 字符型:char ( 'a' 'b' 'c' '1' '2' ) 字符串:'ab' '123' 浮点型:float double 常量:定义一次,不可改变 #define NAME Dy  #define π 3.14 变量:定义一次,可改变多次     int a=1 ---note---

【蓝桥杯竞赛】确定进制

比较简单,只要搞懂b2ten()函数的算法即可 源码 #include <stdio.h> #include <string.h> long b2ten(char* x, int b) {     int ret = 0;      int len = strlen(x);     for (int i = 0; i < len; i++)    {         if (x[i]-'0' >= b)             return -1;         re

C# 中2,10,16进制及其ASCII码之间转化

C# 中2,10,16进制及其ASCII码之间转化             --------//C#中各种字符类型的转化,使用于串口通信------------ //字符长度的理解            string s = "我是一个2兵";            int len = s.Length;//6个字符              byte[] sarr = System.Text.Encoding.Default.GetBytes(s);            len =

Java Integer 进制转化的实现(附源码),对模与补码的理解

1.toBinaryString方法的实现 1 public static String toBinaryString(int i) { 2 return toUnsignedString0(i, 1); 3 } 4 private static String toUnsignedString0(int val, int shift) { 5 // assert shift > 0 && shift <=5 : "Illegal shift value";

计算机基础知识_进制转化

进制转化 一.任何一个进制转化为10进制的方式 156的十进制可以看做1*10^2 + 5*10^1  +   6*10^0 首先我们看一下156 ,平方,次方等等都是根据后面有多少位决定的,如果用计算机计算,则正好是156 33是一个八进制可以看做3*8^1+3*8^0 次方  换算出来就是10进制 如果你本身是x进制,那么你的数字就看做  num * x^位数  比如我有一个16进制的数字,转为10进制 16进制在计算机中表示方法: 1 2 3 4 5 6 7 8 9 a b c d e f

python数据结构:进制转化探索

*********************************第一部分******************************************************************* *********************************************************************************************************************** # 输入excel的行号,输出对应列的序号(从0开

标识符,进制转化,原反补码等

标识符 Java对包.类.方法.参数.变量等要素命名时使用的字符序列. 规则:***** 1.由字母(含中.英.日.俄等).数字.下划线_和美元符号$组成. 2.不能以数字开头   int 123a=1; 3.区分大小写  int a=1和int A=1是不一样的. 4.长度无限制.(一般编程长度不超过15个字符) 5.不能是Java中的保留字和关键字    int class="1"    int ainta=1 保留字和关键字都有哪些?我们知道以后应该避开它们. 标识符命名习惯:*

c语言进制转化

#include <stdio.h> // 进制转化 int main(void) { int i1 = 12; int i2 = 88; int i3 = 0x32C; printf("八进制输出i1 = %o\n", i1); // 14 printf("十六进制输出i2 = %x\n", i2); // 58 printf("十六进制输出i3 = %x\n", i3); // 32c printf("十进制输出i3 =