🌹作者:云小逸
📝个人主页:云小逸的主页
📝Github:云小逸的Github
🤟motto:要敢于一个人默默的面对自己,==强大自己才是核心==。不要等到什么都没有了,才下定决心去做。种一颗树,最好的时间是十年前,其次就是现在!学会自己和解,与过去和解,努力爱自己。==希望春天来之前,我们一起面朝大海,春暖花开!==🤟 👏专栏:C++👏 👏专栏:Java语言👏👏专栏:Linux学习👏
👏专栏:C语言初阶👏👏专栏:数据结构👏👏专栏:备战蓝桥杯👏
@TOC
前言
今天我们继续学习算法,加油。这篇文章写的是# 秦九韶算法进制转换问题。希望这篇可以有幸帮助到你,码字不易,请多多支持。
——————————————————————————————
秦九韶算法进制转换
秦九韶算法是一种快速计算多项式值的算法,它可以用于进制转换等问题。在进制转换中,我们可以将待转换的数字看作一个多项式,并使用秦九韶算法计算它在目标进制下的值。
秦九韶算法进制转换
秦九韶算法是一种快速计算多项式值的算法,它可以用于进制转换等问题。在进制转换中,我们可以将待转换的数字看作一个多项式,并使用秦九韶算法计算它在目标进制下的值。
基本思路
假设我们要将一个 位的数字 从 进制转换为 进制,那么我们可以将 表示为:
其中 表示 在 进制下第 位上的数字。
如果我们希望将 转换为 进制,那么我们只需要将 转换为 进制,然后将它们乘以对应的权重 ,最后将这些值相加即可得到 在 进制下的值。
在实际计算中,我们可以使用秦九韶算法,将计算过程优化为 的复杂度。具体来说,我们可以从低位到高位依次计算每一位上的值,并使用秦九韶算法将它们相加。对于当前位上的数字 ,我们可以将之前的结果乘以 ,然后加上当前位上的值,得到新的结果 。然后,我们再将 乘以 的 次幂,即 ,得到当前位上的值。最终,将所有位上的值相加即可得到 在 进制下的值。
示例1
下面是一个将二进制数 转换为八进制数的示例:
首先,将二进制数 表示为多项式:
然后,从低位到高位依次计算每一位上的值:
- 当前位为 时,;
- 当前位为 时,,当前位上的值为 ;
- 当前位为 时,,当前位上的值为 $3 \times 8^1 = 24
示例2
以将二进制数 101010 转换为十进制数为例,使用秦九韶算法的步骤如下:
-
将二进制数从低位到高位的顺序排列,得到 0 1 0 1 0 1。
-
设 a_n 表示二进制数的第 n 位的值,c_n 表示 2^n。
-
根据秦九韶算法的递推式,可以得到:
a_0 = 1
a_1 = a_0 × 2 + 0 = 2
a_2 = a_1 × 2 + 1 = 5
a_3 = a_2 × 2 + 0 = 10
a_4 = a_3 × 2 + 1 = 21
a_5 = a_4 × 2 + 0 = 42
- 因此,二进制数 101010 对应的十进制数为 42。
在秦九韶算法中,通过递推式快速计算了每一位的权值和该位的值的乘积,并将这些乘积相加得到最终的十进制值。这个算法可以用于任何进制的转换,只需要将递推式中的 2 换成相应的进制数即可。
C++代码:
#include <iostream>
#include <cmath>
using namespace std;
int main()
{
int binary = 101010; // 待转换的二进制数
int decimal = 0; // 十进制数的初始值为0
int n = 0; // 记录二进制数的位数
// 统计二进制数的位数
int temp = binary;
while (temp != 0) {
temp /= 10;
n++;
}
// 使用秦九韶算法计算十进制数
for (int i = 0; i < n; i++) {
int a = binary % 10; // 取出二进制数的最低位
binary /= 10;
decimal += a * pow(2, i); // 使用秦九韶算法计算十进制数
}
cout << "The decimal number is: " << decimal << endl;
return 0;
}
时间复杂度:
在使用秦九韶算法进行进制转换时,时间复杂度为 ,其中 表示待转换数字的位数。这是因为我们只需要从低位到高位依次计算每一位上的值,每次计算只需要进行一些简单的乘法和加法运算,所以总的时间复杂度是线性的。相比之下,直接使用进制转换公式的时间复杂度是 ,其中 表示 进制到 进制的对数,这个复杂度与 和 同阶,且通常情况下 的值较大,所以秦九韶算法更加高效。
最后
十分感谢你可以耐着性子把它读完和我可以坚持写到这里,送几句话,对你,也对我:
1.把时间尺度拉长,拉长十年看当下
2.不说负面情绪,只描述事实;
3.越专注于过好自己,能量和幸运越会照顾你;
只解决问题,不做没有意义的担心,输了就认;
4.学会原谅自己,要允许自己做错事,允许自己出现情绪波动,我知道你已经很努力很努力在做好了
5.所有你害怕的、想逃避的事情,最终都要面对,既然这样不如选择坦然面对。即使结果不如人愿,没关系,至少这个过程是享受的,而不是一路带着恐惧和害怕。
最后如果觉得我写的还不错,请不要忘记==点赞==✌,==收藏==✌,加==关注==✌哦(。・ω・。)
愿我们一起加油,奔向更美好的未来,愿我们从懵懵懂懂的一枚==菜鸟==逐渐成为==大佬==。加油,为自己点赞!