进制转换----辗转相除法(c++实现)
辗转相除法,也称欧几里得算法,是求两个正整数最大公约数的常用方法。该算法基于以下原理:对于两个正整数a和b,其最大公约数等于b和a mod b的最大公约数。换句话说,我们不断将较大数除以较小数所得余数,直到余数为零为止,此时较小数即为原始两数的最大公约数。
当我们进行计算机科学和编程时,经常需要将数字在不同进制之间转换。进制转换是计算机科学中的基础,因为它在数字的内部表示和计算机算术中发挥着重要的作用。在这篇博客中,我们将学习如何将数字从一个进制转换为另一个进制。
进制简介
进制是一种表示数字的方式,它指定了一个数字中可以使用的符号集合。在日常生活中,我们通常使用十进制(也称为“阿拉伯数字”)来表示数字,这意味着我们使用0-9这十个数字。然而,在计算机科学中,我们经常使用其他进制,如二进制、八进制和十六进制。
二进制:使用0和1来表示数字。
八进制:使用0-7来表示数字。
十六进制:使用0-9和A-F来表示数字。
辗转相除法
辗转相除法,也称欧几里得算法,是求两个正整数最大公约数的常用方法。该算法基于以下原理:对于两个正整数a和b,其最大公约数等于b和a mod b的最大公约数。换句话说,我们不断将较大数除以较小数所得余数,直到余数为零为止,此时较小数即为原始两数的最大公约数。
代码展示如下:
def gcd(a, b):
if b == 0:
return a
else:
return gcd(b, a % b)
在这个函数中,如果b等于0,则a即为最大公约数;
否则,我们通过递归调用gcd(b, a % b)来求a和b的最大公约数。
好的,现在知道了进制也知道了辗转相除法让我们用其来实现辗转相除求进制
核心原理如下:
string decimal_to_base(int n, int base) {
if (n == 0) {
return "";
}
else {
return decimal_to_base(n / base, base) + to_string(n % base);
}
}
十进制转二进制
#include <string>
using namespace std;
string decimal_to_binary(int decimal) {
string binary = "";
while (decimal > 0) {
int digit = decimal % 2;
binary = to_string(digit) + binary;
decimal /= 2;
}
return binary;
}
在这个函数中,我们将十进制数转换为二进制数的过程类似于将十进制数转换为其他进制数的过程。因此,我们使用了一个变量binary来保存二进制数的表示,初始值为空字符串。然后,我们使用一个循环,每次处理一个二进制位。将十进制数除以2并向下取整,得到当前位的值,将其转换为字符加到binary的前面。接着,我们将处理位置移到下一位,继续进行计算,直到处理完所有的位数为止。最后,将binary作为函数返回值即可。
例如,调用decimal_to_binary(170)函数即可将十进制数170转换为二进制数10101010。
十进制转十六进制
#include <string>
using namespace std;
string decimal_to_hex(int decimal) {
string hex = "";
while (decimal > 0) {
int digit = decimal % 16;
if (digit < 10) {
hex = to_string(digit) + hex;
}
else {
hex = char(digit - 10 + 'A') + hex;
}
decimal /= 16;
}
return hex;
}
在这个函数中,我们首先将十六进制数的每一位表示为四个二进制位,然后将十进制数转换为二进制数,再将每四个二进制位转换为一个十六进制数位。因此,在这个函数中,我们使用了一个变量hex来保存十六进制数的表示,初始值为空字符串。然后,我们使用一个循环,每次处理一个二进制位。如果这一位小于10,则直接将其转换为字符加到hex的前面,否则将其转换为十六进制数的字母表示形式,再加到hex的前面。接着,我们将十进制数除以16并向下取整,将处理位置移到下一位,继续进行计算,直到处理完所有的位数为止。最后,将hex作为函数返回值即可。
例如,调用decimal_to_hex(170)函数即可将十进制数170转换为十六进制数AA。
本弱弱第一次写文章,希望我的文章对你有所帮助。
若有错误的地方还望大家批评指正,谢谢大家阅读!
别忘了点赞👍
更多推荐
所有评论(0)