《零基础学算法》(第二讲)进制转换

简介: 《零基础学算法》(第二讲)进制转换

🌺其他进制转换成十进制


🍁实现思路


🔺实现原理


从最低位开始,把每一位上的数提取出来,乘上进制数,然后求和。


🔺算法分析


1️⃣从最低位开始一位一位进行判断,有两种情况,第一种为数字,第二种为字母


2️⃣为数字时,答案等于前一次判断的答案 * 进制加上这一位的数字


3️⃣为字母时,答案等于前一次判断的答案 * 进制加上这一位的字母减去'A'加10


🍁二进制转换成十进制


🔺图解原理


a04b7df9fea58efcea8bdbc6042a27fb_f59069dd89f042c9b1dadae3510b5d0b.png


💬 代码演示


int main()    
{
  string s;
  cin>>s;           //二进制数
  int ans=0;
  for(int i=0;i<s.size();i++)
  {
   char t=s[i];
   ans=ans*2+t-'0';
  }
  cout<< ans;
}


🍁八进制转换成十进制


💬 代码演示


int main()    
{
  string s;
  cin>>s;        //8进制数
  int ans=0;
  for(int i=0;i<s.size();i++)
  {
  char t=s[i];
  ans=ans*8+t-'0';
  }
  cout<< ans;
}


🍁十六进制转换成十进制


💬 代码演示


int main()    
{
  string s;
  cin>>s;            //16进制数
  int ans=0;
  for(int i=0;i<s.size();i++)
  {
  char t=s[i];
  if(t>='0'&&t<='9') ans=ans*16+t-'0';
  else ans=ans*16+t-'a'+10;
  }
  cout<< ans;
}


🍁任意进制转换成十进制


相信大家看了之前的例子,应该发现其他进制转换成十进制的规律了吧!我们可以统一一下,写出任意进制转换十进制的函数


💬 代码演示


int main()    
{
  string s;
  cin>>s;            //任意进制数
    int num;
    cin>>num;          //进制数
  int ans=0;
  for(int i=0;i<s.size();i++)
  {
  char t=s[i];
  if(t>='0'&&t<='9') ans=ans*num+t-'0';
  else ans=ans*num+t-'a'+10;
  }
  cout<< ans;
}


🌺十进制转换成其他进制


🍁实现思路


🔺实现原理


将该数不断除以该进制,直到商为0停止,最后将每步得到的数倒过来,就是答案了


🔺算法分析


1️⃣将该数除以该进制,得到的商有两种情况,第一种情况为0-9,第二种情况为 >9


2️⃣商是 0-9 时,直接记录,进行下一次相除


3️⃣商 >9 时,更改为字母形式,进行下一次相除


4️⃣商为 0 时,停止操作,翻转结果,得到答案


🍁十进制转换成二进制


🔺图解原理


这里有一个十进制数【30】,要求转换成二进制数。


d99bfbe8d5fbe649f15dbda1918745f3_e22aec9bd11d43f280993db8e28448b5.png


第一步:30除以2,得到商0,数变成15


第二步:15除以2,得到商1,数变成7


第三步:7除以2,得到商1,数变成3


第四步:3除以2,得到商1,数变成1


第五步:1除以2,得到商1,数变成0


最后一步:停止操作,将得到的商翻转,得到【30】的二进制数【11110】


💬 代码演示


int main()    
{
  int n;
  cin>>n;   //十进制数 
  string ans="";
  do
  {
  int t=n%2;
  ans+=t+'0';
  n/=2;
  }while(n!=0); 
  reverse(ans.begin(),ans.end());
  cout<< ans; 
}


🍁十进制转换成八进制


💬 代码演示


int main()    
{
  int n;
  cin>>n;   //十进制数 
  string ans="";
  do
  {
  int t=n%8;
  ans+=t+'0';
  n/=8;
  }while(n!=0); 
  reverse(ans.begin(),ans.end());
  cout<< ans; 
}


🍁十进制转换成十六进制


💬 代码演示


int main()    
{
  int n;
  cin>>n;   //十进制数 
  string ans="";
  do
  {
  int t=n%16;
  if(t>=0&&t<=9)  ans+=t+'0';
  else ans+=t-10+'a';
  n/=16;
  }while(n!=0); 
  reverse(ans.begin(),ans.end());
  cout<< ans; 
}


🍁十进制转换成任意进制


相信大家看了之前的例子,应该发现十进制转换成任意进制的规律了吧!我们可以统一一下,写出十进制转换任意进制的函数


💬 代码演示


int main()    
{
  int n;
  cin>>n;   //任意进制数 
    int num;
    cin>>num;       //进制数
  string ans="";
  do
  {
  int t=n%num;
  if(t>=0&&t<=9)  ans+=t+'0';
  else ans+=t-10+'a';
  n/=num;
  }while(n!=0); 
  reverse(ans.begin(),ans.end());
  cout<< ans; 
}


🌺任意进制转换成任意进制


如果大家明白了上边的题目,可以动脑想一想,随机给定一个任意进制数 num1 ,要求转换成另一个任意进制数 num2 ,应该怎么实现呢?


🔺实现原理


我们可以先把 num1 转换成十进制数字,再把十进制数字转换成 num2


💬 代码演示


int main()    
{
  string s;
  cin>>s;             //任意进制数
    int num1;
    cin>>num1;          //进制数
  int num=0;          
  for(int i=0;i<s.size();i++)    //将num1进制数字s1转换成十进制数 num
  {
    char t=s[i];
    if(t>='0'&&t<='9') num=num*num1+t-'0';
    else num=num*num1+t-'a'+10;
  }
    int num2;
    cin>>num2;            //进制数
  string ans="";        //最终答案
  do                    //将十进制数num转换成num2进制数字 
  {
    int t=num%num2;
    if(t>=0&&t<=9)  ans+=t+'0';
    else ans+=t-10+'a';
    num/=num2;
  }while(num!=0); 
  reverse(ans.begin(),ans.end());
  cout<< ans; 
}

相关文章
《算法基础学习》进制转换(入门)
算法学习 《算法零基础100讲》(第19讲) 进制转换(一) - 入门_英雄哪里出来-CSDN博客https://blog.csdn.net/WhereIsHeroFrom/article/details/120875977 习题解题报告
《算法基础学习》进制转换(入门)
|
算法 BI Shell
算法解密84位加密,进制转换解密脚本
十六进制转十进制转二进制,根据规则进行转换后拼接
368 0
|
算法 人工智能
算法学习之路|进制转换
输入一个十进制数N,将它转换成R进制数输出。
1119 0
|
算法 Python
结合stack数据结构,实现不同进制转换的算法
#!/usr/bin/env python # -*- coding: utf-8 -*- # learn # Release 3.0 # chengang882 @ 2016-12-20 # 它可以将十进制转换成二进制,八进制和十六进制 # Completed impleme...
971 0
|
5天前
|
算法 数据安全/隐私保护 计算机视觉
基于二维CS-SCHT变换和LABS方法的水印嵌入和提取算法matlab仿真
该内容包括一个算法的运行展示和详细步骤,使用了MATLAB2022a。算法涉及水印嵌入和提取,利用LAB色彩空间可能用于隐藏水印。水印通过二维CS-SCHT变换、低频系数处理和特定解码策略来提取。代码段展示了水印置乱、图像处理(如噪声、旋转、剪切等攻击)以及水印的逆置乱和提取过程。最后,计算并保存了比特率,用于评估水印的稳健性。