精华内容
下载资源
问答
  • 十六进制转为八进制过程中包含了将十六进制转化为二进制以及将二进制转化为八进制! 我自己测试是没什么问题,但是在蓝桥杯官网的测试系统就显示运行错误qwq 不知道为什么 附代码: #include<iostream> #...

    在十六进制转为八进制的过程中包含了将十六进制转化为二进制以及将二进制转化为八进制!

    我自己测试是没什么问题,但是在蓝桥杯官网的测试系统就显示运行错误qwq
    不知道为什么
    附代码:

    #include<iostream>
    #include<string.h>
    using namespace std;
    int main()
    {
    	string code1(char p);
    	string code2(char a,char b,char c);
    	int i,n,j,flag;
    	cin>>n;
    	string sixteen[n],two[n],eight[n];
    	char twoo[n][1000],eightt[n][1000];
    	int len1[n],len2[n];
    	for(i=0;i<n;i++)
    		cin>>sixteen[i];
    	for(i=0;i<n;i++)
    	{
    		len1[i] = sixteen[i].length();
    		for(j=0;j<len1[i];j++)
    			two[i] = two[i] + code1(sixteen[i][j]);
    		len2[i] = two[i].length();
    		for(j=0;j<=len2[i];j++)
    			twoo[i][j] = two[i][j];
    		if(len2[i]%3==1)
    		{
    			for(j = len2[i]+1;j>=0;j--)
    				twoo[i][j] = twoo[i][j-2];
    			twoo[i][1] = twoo[i][0] = '0';
    		}
    		if(len2[i]%3==2)
    		{
    			for(j = len2[i];j>=0;j--)
    				twoo[i][j] = twoo[i][j-1];
    			twoo[i][0] = '0';
    		}
    		for(j=0;j<len2[i];j=j+3)
    			eight[i] = eight[i] + code2(twoo[i][j],twoo[i][j+1],twoo[i][j+2]);	
    		for(j=0;j<len2[i];j++)
    			eightt[i][j] = eight[i][j];
    
    		for(j=0;j<eight[i].length();j++)
    			if(eight[i][j]!='0'){
    				flag = j;break;
    			}
    		for(j=flag;j<eight[i].length();j++)
    			cout<<eight[i][j];	
    		cout<<endl;	
    	}			
    	return 0;	
    }
    
    
    string code2(char a,char b,char c)
    {
    	if(a=='0'&&b=='0'&&c=='0')  return("0");
    	if(a=='0'&&b=='0'&&c=='1')  return("1");
    	if(a=='0'&&b=='1'&&c=='0')  return("2");
    	if(a=='0'&&b=='1'&&c=='1')  return("3");
    	if(a=='1'&&b=='0'&&c=='0')  return("4");
    	if(a=='1'&&b=='0'&&c=='1')  return("5");
    	if(a=='1'&&b=='1'&&c=='0')  return("6");
    	if(a=='1'&&b=='1'&&c=='1')  return("7");		
    }
    
    
    string code1(char p)
    {
    	if(p == '0')   return("0000");
    	if(p == '1')   return("0001");
    	if(p == '2')   return("0010");
    	if(p == '3')   return("0011");
    	if(p =='4')    return("0100");
    	if(p == '5')   return("0101");
    	if(p == '6')   return("0110");
    	if(p == '7')   return("0111");
    	if(p == '8')   return("1000");
    	if(p == '9')   return("1001");
    	if(p == 'A')   return("1010");
    	if(p == 'B')   return("1011");
    	if(p == 'C')   return("1100");
    	if(p == 'D')   return("1101");
    	if(p == 'E')   return("1110");
    	if(p == 'F')   return("1111");
    }
    

    还有十六进制转化为十进制的,这个就比较简单了

    #include<stdio.h>
    #include<string.h>
    #include<math.h>
    int main()
    {
    	long long sum=0;
    	char pp[100];
    	scanf("%s",&pp);
    	int len;	
    	len = strlen(pp);
    	for(int i=0;i<len;i++)
    	{
    		if(pp[i]>='0'&&pp[i]<='9')
    		sum = sum + (pp[i]-48)*pow(16,len-i-1);
    		if(pp[i] == 'A')
    		sum = sum + 10*pow(16,len-i-1);
    		if(pp[i] == 'B')
    		sum = sum + 11*pow(16,len-i-1);
    		if(pp[i] == 'C')
    		sum = sum + 12*pow(16,len-i-1);
    		if(pp[i] == 'D')
    		sum = sum + 13*pow(16,len-i-1);
    		if(pp[i] == 'E')
    		sum = sum + 14*pow(16,len-i-1);
    		if(pp[i] == 'F')
    		sum = sum + 15*pow(16,len-i-1);
    	 } 
    	printf("%I64d",sum);
    	return 0;
     } 
    

    最近一直在划水,我的300元报名费要打水漂了呜呜呜

    展开全文
  • 蓝桥杯 基础练习 十六进制转八进制 题目已经说明了每个十六进制数长度不超过100000。 长度足够的时候,数字已经非常大了。所以不能用int或者long long把十六进制先转成十进制在转为八进制过程中的数字存储起来。 ...

    蓝桥杯 基础练习 十六进制转八进制

    题目已经说明了每个十六进制数长度不超过100000
    长度足够的时候,数字已经非常大了。所以不能用int或者long long把十六进制先转成十进制在转为八进制过程中的数字存储起来。
    利用的思路是:先将每1位十六进制数转换成4位二进制,补够位数后,再把每1位二进制转换为1位八进制,然后再按序输出(前置的0忽略)。

    比如题目给的例子:
    转换示意图
    代码:

    # include <iostream>
    # include <string>
    using namespace std;
    
    /*每一位十六进制数字都可以转换为四位二进制数字*/
    string change(char n){
        string num;
        switch(n){
            case '0':num="0000";break;
            case '1':num="0001";break;
            case '2':num="0010";break;
            case '3':num="0011";break;
            case '4':num="0100";break;
            case '5':num="0101";break;
            case '6':num="0110";break;
            case '7':num="0111";break;
            case '8':num="1000";break;
            case '9':num="1001";break;
            case 'A':num="1010";break;
            case 'B':num="1011";break;
            case 'C':num="1100";break;
            case 'D':num="1101";break;
            case 'E':num="1110";break;
            case 'F':num="1111";break;
            default:break;
        }
        return num;
    }
    
    /*补齐位数,确保二进制数字的长度是3的倍数,才能转换为八进制*/
    string supply(string str){
        int len = str.size();
        if(len%3==0)
            return str;
        else if(len%3==1)
            return "00"+str;
        else
            return "0"+str;
    }
    
    /*每三位二进制数字都可以转换为一位八进制数字*/
    char convert(char a,char b,char c){
        int a_ = a-48;
        int b_ = b-48;
        int c_ = c-48;
        int out = a_*4+b_*2+c_;
        return out+48;
    }
    
    int main()
    {
        int n,i,j;
        string num;
        cin>>n;
        /*循环次数*/
        while(n--){
            cin>>num;/*输入十六进制数字字符串*/
            string to16_2="",to2_8="";
            int len1 = num.size();
            for(i=0;i<len1;i++){
                to16_2 += change(num[i]);/*把每一位十六进制数字转换为二进制再串起来*/
            }
            to16_2 = supply(to16_2);/*补够位数*/
            int len2 = to16_2.size();
            for(i=0;i<=(len2-3);i=i+3){
                to2_8 += convert(to16_2[i],to16_2[i+1],to16_2[i+2]);/*变成八进制*/
            }
            int flag=0,len3 = to2_8.size();
            for(i=0;i<len3;i++){/*输出*/
                if(to2_8[i]!='0'){
                    flag=1;
                }
                if(flag==1){
                    cout<<to2_8[i];
                }
            }
            cout<<endl;
        }
        return 0;
    }
    
    展开全文
  • 题目描述: 知识点:进制转换 思路:先将十六进制转换成二进制,再将二进制转换成八进制 ...由于在二进制转八进制过程中,为方便处理,我将字符串翻转了,所以哈希表中存储的是逆序的二进制序列和其对...

    我的蓝桥杯代码仓:https://github.com/617076674/lanqiao

    题目描述:

    知识点:进制转换

    思路:先将十六进制转换成二进制,再将二进制转换成八进制

    为防止超时,用一个数组来保存十六进制和二进制间的对应关系,用一个哈希表来保存二进制和八进制间的对应关系。

    由于在二进制转八进制的过程中,为方便处理,我将字符串翻转了,所以哈希表中存储的是逆序的二进制序列和其对应的八进制值。由于翻转后会存在字符串末端不足3位的情况,因此哈希表中的键需要包含2个字符及1个字符的二进制序列。

    JAVA代码:

    import java.util.HashMap;
    import java.util.Scanner;
    
    public class Main {
    	private static String[] hexToBinary = {"0000", "0001", "0010", "0011", "0100", "0101", "0110", "0111",
    			"1000", "1001", "1010", "1011", "1100", "1101", "1110", "1111"};
    	private static HashMap<String, String> binaryToOct;	//存储逆序的2进制序列和对应的8进制值
    	static {
    		binaryToOct = new HashMap<String, String>();
    		binaryToOct.put("000", "0");
    		binaryToOct.put("100", "1");
    		binaryToOct.put("010", "2");
    		binaryToOct.put("110", "3");
    		binaryToOct.put("001", "4");
    		binaryToOct.put("101", "5");
    		binaryToOct.put("011", "6");
    		binaryToOct.put("111", "7");
    		binaryToOct.put("00", "0");
    		binaryToOct.put("10", "1");
    		binaryToOct.put("01", "2");
    		binaryToOct.put("11", "3");
    		binaryToOct.put("0", "0");
    		binaryToOct.put("1", "1");
    	}
    	public static void main(String[] args) throws Exception {
    		Scanner scanner = new Scanner(System.in);
    		int n = scanner.nextInt();
    		scanner.nextLine();
    		for(int i = 0; i < n; i++) {
    			System.out.println(toOct(toBinary(scanner.nextLine())));
    		}
    	}
    	
    	private static String toBinary(String s) {
    		StringBuilder result = new StringBuilder();
    		for(int i = 0; i < s.length(); i++) {
    			char c = s.charAt(i);
    			if(c >= 'A' && c <= 'F') {
    				result.append(hexToBinary[c - 'A' + 10]);
    			}else {
    				result.append(hexToBinary[c - '0']);
    			}
    		}
    		while(result.charAt(0) == '0') {	//删除前导0
    			result.deleteCharAt(0);
    		}
    		return result.toString();
    	}
    	
    	private static String toOct(String s) {
    		StringBuilder result = new StringBuilder();
    		StringBuilder input = new StringBuilder(s);
    		input.reverse();
    		for(int i = 0; i < input.length(); i += 3) {
    			result.append(binaryToOct.get(input.substring(i, Math.min(i + 3, input.length()))));
    		}
    		return result.reverse().toString();
    	}
    }
    

    JAVA解题报告:

     

    展开全文
  • 十六进制转八进制 n=int(input()) ls=[] for i in range(n): m=input() ls.append(m) for s in ls: print('{:o}'.format(int(s,16))) 在输入过程中,本来是打算直接输入三个数字,用三个input()实现...

    十六进制转十进制

    m=input()
    print(int(m,16))
    

    十六进制转八进制

    n=int(input())
    ls=[]
    for i in range(n):
        m=input()
        ls.append(m)
    for s in ls:
        print('{:o}'.format(int(s,16)))
    

    在输入过程中,本来是打算直接输入三个数字,用三个input()实现,但是在提交时显示错误。在参考了网友的答案后,知道需要使用for…in…循环。感谢大神。https://blog.csdn.net/qq_45894553/article/details/104504592
    https://www.cnblogs.com/lovejh/p/9201219.html
    补充:自己几天后又做了一遍,使用列表ls是为了使得代码可以实现题目的输出要求
    用int(s,16)将十六进制转换为十进制,如上题。然后用format中的{😮}将十进制转换为八进制。
    以下为format中的转换
    ‘b’ - 二进制。
    ‘c’ - 字符。
    ‘d’ - 十进制整数。
    ‘o’ - 八进制。
    ‘x’ - 十六进制。(小写字母)
    ‘e’ - 幂符号。用科学计数法打印数字
    ‘g’ - 一般格式。将数值以fixed-point格式输出。当数值特别大的时候,用幂形式打印。
    ‘n’ - 数字。当值为整数时和’d’相同,值为浮点数时和’g’相同。不同的是它会根据区域设置插入数字分隔符。
    ‘%’ - 百分数。将数值乘以100然后以fixed-point(‘f’)格式打印,值后面会有一个百分号。

    展开全文
  • 用‘栈’的思想编写一个十进制转换二进制、八进制十六进制的程序根据进制转换方法,如十进制向二进制转换,将转换的十进制整数除以二进制基数(2),得到余数和商,如果商不为0,该商继续做被除数,除以基数,得到...
  • 用‘栈’的思想编写一个十进制转换二进制、八进制十六进制的程序根据进制转换方法,如十进制向二进制转换,将转换的十进制整数除以二进制基数(2),得到余数和商,如果商不为0,该商继续做被除数,除以基数,得到...
  • 根据这个过程我们就得到了5A,那么根据十六进制的开头用前缀0x 90的十六进制0x5A (小写a大写A都可以) 发散: 1、为什么十六进制用4个二进制位表示嘛? 因为4个二进制位的最大值是15。 2、有32进制嘛?
  • 进制转八进制 八进制、十六进制和十进制之间的转换可通过二进制作为中介。 十进制小数转二进制小数 乘不尽的小数进制转换 0.8、0.6、0.2... ...一些数字在进制之间的转化过程中确实存在麻烦。 就比如0.8的...
  • 进制转十进制,乘2过程 二进制110转十进制 0*2的0次方+1*2的1次方+1*2的2次方=6 对应关系 0 1 0 1 0 1 32 16 8 4 2 1 把1对应的位置的数加起来就可以了,所以是21 一个字节 1 1 1 1 1 1 1 1 最大值是...
  • 总结 ...各个进制的转化 int 的 temp(新变量)要赋初值 注意在变量使用中,有些中间变量内容的清楚 关于调试 控制台和打印追踪 关于代码在书写过程中的策略 *先将功能模块写出来,可以分不同...
  • 平时使用的数字都是由 0~9 共十个数字组成,例如 1、8、10、666、999 等,一个数字最多能表示九,如果要表示十、十一、二十九、一百等,就需要多个数字组合起来。...十进制是在人类社会发展过程中自然形成的,...
  • 在编程的过程中经常会碰到需要将数字在十进制、八进制十六进制之间进行转换,以往都是屁颠屁颠的自己写代码实现,今天看c++的时候发现原来cout把一切都已经帮你做好了,在此为自己的无知羞涩一下。 #include ...
  • 比如十进制与二进制,八进制十六进制之间的相互转化。为了方便起见,特意将java中不同进制间相互转化的代码整理以备后续使用。package leilei.bit.edu.sort;public class NumRadixConvert { public static void ...
  • 进制转十进制 当符号位为0时为正数 二进制:00101101 转换过程:2^5 + 2^3 + 2^2 +2^0 十进制:45 当符号位为1时为负数 补码:11010011 ↓补码-1 反码:11010010 ↓除符号位外,其余部分取反 原码:10101101 ↓...
  • 最近,工作中需要查看数据库中某些字段的二进制表示格式,索性写了一些进制质检相互转换的过程函数,以方便调用。 记录下这些代码,以备使用。 create or replace package pkg_digit_conv as --将字符串转换为其...
  • 平时使用的数字都是由 0~9 共十个数字组成,例如 1、8、10、666、999 等,一个数字最多能表示九,如果要表示十、十一、二十九、一百等,就需要多个数字组合起来。...十进制是在人类社会发展过程中自然形成的,...
  • 进制整数N向其它进制数d(二、 十六)的转换是计算机实现计算的基本问题。 转换法则: n=(n div d)*d+n mod d 其中: div为整除运算,mod为求余运算 例如 (1348)10= (2504)8, 其运算过程如下: n n div 8 ...
  • ##不甘平凡#最近在学习python,不过跟着课本的作业题目:分别就计算二进制110110011、八进制256和十六进制的数字a4b5,并转化为十进制求和。不过写过程中遇到了个问题:如何在python中输入二进制数字?在网上百度了...
  • 突然发现关于一些转换关系有些模糊,又重新复习一遍,现在记录下来加深下记录也和大家...eg1:整数 17 的二进制转换过程: 17 / 2 = 8 --------- 余数1 8 / 2 = 4 --------- 余数0 4 / 2 = 2 --------- 余数0 ...
  • 开发过程中,一般直接定义的整型数据类型默认都是以十进制数据输出的。 一.什么是二进制数据? 二进制是计算技术中广泛采用的一种数制。二进制数据是用0和1两个数码来表示的数。它的基数为2,进位规则是“逢二进一...
  • 进制转换为其他进制有一个基本公式:N = (N div d)*d + N mod d(其中:div 是整除,mod 为求余,N 是十进制数,d 是要目标进制)。 例如:(1348)10 = (2504)8,运算过程如下: N N div 8 N mod 8 ...
  • 二进制与十六进制之间的转换与二进制和八进制之间的转换很类似,今天我们来详细看一下:首先,我们来看一下数学关系即24=16,即用四位二进制表示一位八进制。 首先呢,先要看看十六位数的表示方法,如图1所示。...
  • 十进制 十进制转二进制 1:整数间互转 原理:除2倒取余 示例:135D = ______ B ...十进制转八进制 原理:整数部分除以8取余数,直到不能整除。小数部分乘以8取整数,直到达到要求的精度。 示例:10....
  • 我们处理的整数通常用十进制表示,在计算机内存中是以二进制补码形式存储,但通常二进制表示的整数比较长,为了便于在程序设计过程中理解和处理数据,通常采用八进制十六进制,缩短了二进制补码表示的整数,但保持...
  • 进制转换

    2019-10-20 23:48:53
    常用的进制有二进制(计算机的语言),八进制,十进制(生活中所用的就是十进制),十六进制(内存地址一般用十六进制显示)。 那么这些进制是如何相互转换的呢 首先说二进制 : 给你一个十进制,比如6,如果将它...
  • C++ 十进制转其他进制

    2019-04-17 20:07:35
    C++ 十进制转其他进制 开发工具与关键技术:C++、Visual...这篇文章主要内容是十进制转其他进制,现在的进制有十六进制、十进制、八进制、二进制。 我们先来看代码: #include #include using namespace std; v...

空空如也

空空如也

1 2 3 4 5 ... 9
收藏数 173
精华内容 69
关键字:

十六进制转八进制过程