问题标题: 酷町堂:进制

0
0

2
已采纳
倪雨泽
倪雨泽
高级光能
高级光能
  • 进制转换难道不是在模拟之前吗?(灵魂拷问)

进入正题:

何为进制转换捏?

引言

   日常生活中我们一般用十进制来计数,逢十进一。
   比如从1数到9都是一位数,然而到10就变成了两位数,发生了进位。
   从19往上数是20,也发生了进位:19的个位9加1之后变成10,个位装不下了,所以进位。
   然而除了十进制,人们还发明了别的计数制(进制),比如计算机内部存储数据用的是二进制。除此之外还有八进制,十六进制等等……
   这里我就来讲讲十进制数与二进制数的互相转化。       ——引用于讲义

首先:何为进制?

进位制计数法是一种记数方式,可以用有限的数字符号代表所有的数值。可使用数字符号的数目称为基数或底数,底数为n,即可称n进制。(逢n进1)
   如:十进制的底数是10 ,逢10进1,我们使用0~9这10个数字表示十进制的所有数;
   二进制的底数是2,逢2进1,我们使用0和1这两个数字就可以表示二进制的所有数。

   对于底数超过十的进制的数字,除了用0~9的数字,还需要用到大写字母来表示该进制的数字。比如需要用0~9以及大写字母A来表示十一进制的数字,其中A的数值等效于10。                ——引用于讲义

那么:不同进制如何表示捏?

   在数字的右下角写上底数(加括号)。
   如:十进制的123: 123(10)
   二进制的1101: 1101(2)

——引用于讲义









累了,以下内容全部引用于讲义(doge

二进制数与十进制数的互相转化 二进制与十进制的对应关系 image.png

1)二进制转十进制

原理: 将二进制数的每一位乘以相应的系数再相加,即得到对应的十进制数字。 如:将1101(2)转换成十进制数: 将1101从右到左每个数乘以20, 21, 22, 23 120+021+122+123 = 1+0+4+8 =13

代码实现: 输入一个二进制数n,将它转换成十进制形式输出

思路:每次取二进制数的最后一位(n%10),乘以相应的系数,加到最终的结果中,加完之后把这最后一位删掉(n/=10),系数每次也要做相应的改变。

#include<iostream>
using namespace std;
int main() 
{   
    long long n,w,s=0,t=1;   //s:用于存储十进制结果,  t:系数的初值为1
    cin>>n;
    while(n)
    {
        w=x%10;       //取n的最后一位
        s=s+w*t;   //将二进制最后一位数乘以相应的系数加到和s中
        t=t*2;       //系数扩大2倍
        n=n/10;       //去掉n的最后一位
    }
    cout<<s;
    return 0;
}

2)十进制转二进制

原理: 十进制整数转换为二进制整数采用 “除2取余,逆序排列” 法。

具体做法是:用2整除十进制整数,可以得到一个商和余数;再用2去除商,又会得到一个商和余数,如此进行,直到商为0时终止,然后将这些余数按照得到的顺序从后往前依次排列起来。

代码实现

#include<iostream>
using namespace std;
int a[100];
int main()
{
    long long n;
    cin>>n;
    int i=0;
    while(n){
    a[++i]=n%2;    //除2取余,将余数存进数组
    n/=2;
    }
    for(int j=i;j>=1;j--)    //逆序输出
        cout<<a[j];
    return 0;
}

以下手打:

k转十&十转k同理,扩大或除求余的数更改即可

0
0
0
葛思辰
葛思辰
新手守护
新手守护

引言
       日常生活中我们一般用十进制来计数,逢十进一。
       比如从1数到9都是一位数,然而到10就变成了两位数,发生了进位。
       从19往上数是20,也发生了进位:19的个位9加1之后变成10,个位装不下了,所以进位。
       然而除了十进制,人们还发明了别的计数制(进制),比如计算机内部存储数据用的是二进制。除此之外还有八进制,十六进制等等……
       这节课我们就来学习十进制数与二进制数的互相转化。
 

一、课堂知识

1. 什么是进制

       进位制计数法是一种记数方式,可以用有限的数字符号代表所有的数值。可使用数字符号的数目称为基数底数,底数为n,即可称n进制。(逢n进1
       如:十进制的底数是10 ,逢10进1,我们使用0~9这10个数字表示十进制的所有数;
       二进制的底数是2,逢2进1,我们使用0和1这两个数字就可以表示二进制的所有数。
      
       对于底数超过十的进制的数字,除了用0~9的数字,还需要用到大写字母来表示该进制的数字。比如需要用0~9以及大写字母A来表示十一进制的数字,其中A的数值等效于10。

2. 不同进制数字的表示方法

       在数字的右下角写上底数(加括号)。
       如:十进制的123: 123(10)
       二进制的1101: 1101(2)

3. 二进制数与十进制数的互相转化

二进制与十进制的对应关系
image.png

1)二进制转十进制

 
原理: 将二进制数的每一位乘以相应的系数再相加,即得到对应的十进制数字。
如:将1101(2)转换成十进制数: 将1101从右到左每个数乘以20, 21, 22, 23
1*20+0*21+1*22+1*23 = 1+0+4+8 =13

输入一个二进制数n,将它转换成十进制形式输出

思路:每次取二进制数的最后一位(n%10),乘以相应的系数,加到最终的结果中,加完之后把这最后一位删掉(n/=10),系数每次也要做相应的改变。

2)十进制转二进制
原理: 十进制整数转换为二进制整数采用 “除2取余,逆序排列” 法。

具体做法是:用2整除十进制整数,可以得到一个商和余数;再用2去除商,又会得到一个商和余数,如此进行,直到商为0时终止,然后将这些余数按照得到的顺序从后往前依次排列起来

0
葛思辰
葛思辰
新手守护
新手守护

n进制转十进制

分析: 可以数字定义成字符串来输入。
数字各位上的数对应字符串下标0~字符串长度-1的元素,则从右往左分别将每个数字(注意字符数字要减掉’0’才得到对应的数字)乘以相应的系数,再相加得到结果。

0
何文烁
何文烁
中级守护
中级守护

比如我要将35转化为16进制,在cout中,可以这么转换:

输出<<hex<<35;

8进制:

输出<<oct<<35;

2进制(保留N位):

输出 << bitset<n>(35);

转10进制:

输出<<dec<<35;

注意,hex、oct、dec不是变量!

0
张洪睿
张洪睿
资深光能
资深光能

十进制转二进制

首先定义一个 整型变量/长整型变量 n,还有一个字符串ans

然后输入n

接着是一个循环(for也可以,但是建议用while,我就用while),条件是n就可以

循环内部是ans变成字符型的n模2再加上'0',还要拼接ans本身,别忘了n还要除以2

最后输出ans即可

二进制转化十进制

首先定义一个 整型变量/长整型变量sum(初始值为0)和t(初始值为1)还有k,还有一个字 符串s

然后输入s

k赋值为s的长度

这里的循环就是建议用for,从k减1到0(包括0),每次循环的变量自减一次

里面是sum加等于s的当前位减'0'的和乘上t,t每次乘等于2

最后输出sum就可以了

我要回答