整数进制转换技巧以及相关算法题讲解(简洁易懂)

      本文讲解2进制到16进制之间的进制转换,并通过两道例题,来帮助大家熟练掌握不同进制之间的转换方法。

掌握各种进制数与十进制之间的互相转化即可

        网上许多教程都是举了一大堆例子,讲了各种数字进制间的转换,搞得初学者摸不着头脑。其实只要掌握各种进制数与十进制之间的互相转化即可。后面计算各个进制数间的转换过程中,拿十进制作为跳板就行了。

        1、二、八、十六进制数如何转换成十进制数:

我们以11011这个数来举例:

二进制11011和八进制11011转换成十进制(规律很简单,看图就能懂):

十六进制也是这个规律,这里就不再阐述

2、十进制数转换成二、八、十六进制数:

我们以110这个数来举例:

 十进制110转换成二、八、十六进制(规律很简单,看图就能懂):

短除法求出余数,然后逆序输出余数就是结果(开头为0要舍去)

        掌握以上两部分,也就是搞懂各进制数与十进制数之间的相互转换过程即可,其它进制间的转换只要将十进制数作为跳板就能推出来。比如八进制转换成十六进制,先把八进制转换成十进制,再将十进制转换成十六进制;二进制转换成八进制,先把二进制转换成十进制,再将十进制转换成八进制就行。

        可以尝试下以下两道算法题,可以加深对进制转换的理解(这里用C++来讲解):

Acwing801. 二进制中1的个数 (涉及十进制与二进制间的转换

给定一个长度为 n 的数列,请你求出数列中每个数的二进制表示中 1 的个数。

输入格式

第一行包含整数 n。

第二行包含 n 个整数,表示整个数列。

输出格式

共一行,包含 n 个整数,其中的第 i 个数表示数列中的第 i 个数的二进制表示中 1 的个数。

数据范围

1 ≤ n ≤ 100000
0 ≤ 数列中元素的值 ≤ 10^9

输入样例:

5
1 2 3 4 5

输出样例:

1 1 2 1 2

 AC代码:

#include<bits/stdc++.h>
using namespace std;

int main(){
	int n;
	cin >> n;
	int num;    
	int res;    
	int cnt = 0;

	while(n--){
		cin >> num;
		while(num){       //num不等于0时
			res = num % 2;    //类似短除法每一步求余数
			if(res == 1) ++cnt;    //余数是1,就让cnt+1
			num /= 2;		//因为是求二进制,所以每次都除以二
		}
		cout << cnt << " ";
		cnt = 0;
	}

	return 0;
}

洛谷P1143 进制转换  (涉及各种进制间的转换)

题目描述

请你编一程序实现两种不同进制之间的数据转换。

输入格式

共三行,第一行是一个正整数,表示需要转换的数的进制n(2≤n≤16),第二行是一个n进制数,若n>10则用大写字母A-F表示数码10−15,并且该n进制数对应的十进制的值不超过1000000000,第三行也是一个正整数,表示转换之后的数的进制m(2≤m≤16)。

输出格式

一个正整数,表示转换之后的m进制数。

输入输出样例

输入 #1

16
FF
2

输出 #1

11111111

 AC代码:

#include<bits/stdc++.h>
 using namespace std;

 int char_to_int(char a){    //字符转成数字的方法
 		return '0' <= a && a <= '9' ? a - '0' : 10 + a - 'A'; 
 	} 

 char int_to_char(int a){    //数字转成字符的方法
 		return a <= 9 ? '0' + a : a - 10 + 'A'; 
 	}

 int main(){
 	int output[35];
 	int n,m,dec = 0,num = 0;
 	string input;    //输入的数存储为字符串形式
 	cin >> n >> input >> m;

 	for(int i = 0; i < input.length(); i++){ //先转成十进制
 		dec = dec*n + char_to_int(input[i]);
 	}

 	while(dec){    
 		output[num++] = dec % m, dec /= m; //再通过十进制为跳板,转为其它进制数
 	}

 	for(int i = num - 1; i >= 0; i--){
 		cout << int_to_char(output[i]);    //输出
 	}

 	cout << endl;

 	return 0;
 }

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是一个简单的C++函数,用于将大整数从一种进制转换为另一种进制: ```cpp #include <iostream> #include <string> #include <algorithm> #include <cmath> using namespace std; string convertBase(string num, int oldBase, int newBase) { int decimalNum = 0; int power = 1; bool isNegative = (num[0] == '-'); // Convert to decimal base for (int i = num.size() - 1; i >= isNegative ? 1 : 0; i--) { int digitValue = isdigit(num[i]) ? num[i] - '0' : num[i] - 'A' + 10; decimalNum += digitValue * power; power *= oldBase; } // Convert to new base string newNum; while (decimalNum > 0) { int remainder = decimalNum % newBase; char digitChar = (remainder < 10) ? remainder + '0' : remainder - 10 + 'A'; newNum += digitChar; decimalNum /= newBase; } if (newNum.empty()) { newNum = "0"; } if (isNegative) { newNum += '-'; } // Reverse the result and return reverse(newNum.begin(), newNum.end()); return newNum; } int main() { string num; int oldBase, newBase; cout << "Enter a number: "; cin >> num; cout << "Enter the old base: "; cin >> oldBase; cout << "Enter the new base: "; cin >> newBase; cout << num << " in base " << oldBase << " is " << convertBase(num, oldBase, newBase) << " in base " << newBase << endl; return 0; } ``` 该函数使用两个参数:要转换的数字和两个进制值(旧进制和新进制)。它首先将该数字转换为十进制,然后将其转换为新进制。在转换过程中,该函数会使用余数和商的计算来获得新进制下的每一位。最后,新数被反转并返回。 请注意,此函数仅适用于非负整数。如果输入数字为负数,则应在函数中进行适当的更改。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值