问题标题: 酷町堂:如何实行进制运算

0
0

0
0
0
吕若朴
吕若朴
中级光能
中级光能

我没学过【滑稽】

但是我认为可以用类似高精度的方法解决:

定义两个数组,将它们诸位加起来,满n进位,注意要把每个数组的数值限制在n以内(模运算)。

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的数值等效于11。

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),系数每次也要做相应的改变。

 

#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; }

0
潘晨皓
潘晨皓
高级天翼
高级天翼

其实就是运用短除法即可求出(方田不是教了吗?不过代码没教)

0
董宇昊
董宇昊
初级启示者
初级启示者

短除法,我们上一节课的内容

我要回答