1.前文

2.正文(加遗漏)

2.1x进制转十进制

2.1.1二进制转十进制

2.1.2 八进制转十进制

2.2 十六进制转十进制

2.3 十进制转十六进制

1.前文

好吧,上一次的文章少了十转十六进制的,今天一起补上

2.正文(加遗漏)

2.1x进制转十进制

2.1.1二进制转十进制

这个代码关于权重,我就先简略介绍一下吧

权重,就是指这个位数上的数的数值是多少

比如:

32   16   8   4   2   1

1     1     0   1   1   0

为零的数位上就不计算(也可以计算,装b吗,谁不会呀)

所以,这个二进制数,转成十进制数算式就是这样

(从低位到高位算)

=0*1+1*2+1*4+0*8+1*16+1*32

=0+2+4+0+16+32

=54

所以,我们就要定义一个变量,q(权重的简称(权)的首字母)

然后,就要把代码给放出来了

#include<bits/stdc++.h>
using namespace std;
int main()
{
	int k,q=1,sum=0;//k是来储存每一位上的数字的
	string s;
	cin>>s;
	int n=s.size();
	for(int i=n-1;i>=0;i--)//从低位到高位取 
	{
		k=s[i]-'0';//将每一位数字字符转成数字 
		sum=sum+k*q;//乘权重求和
		q=q*2;//每往前一位,权重扩大2倍,毕竟是二进制转十进制吗
	}
	cout<<sum;
	return 0;
}

2.1.2 八进制转十进制

一样,把第十三行的q=q*2改成q=q*8就行了

#include<bits/stdc++.h>
using namespace std;
int main()
{
	int k,q=1,sum=0;//k是来储存每一位上的数字的
	string s;
	cin>>s;
	int n=s.size();
	for(int i=n-1;i>=0;i--)//从低位到高位取 
	{
		k=s[i]-'0';//将每一位数字字符转成数字 
		sum=sum+k*q;//乘权重求和
		q=q*8;//每往前一位,权重扩大8倍,毕竟是八进制转十进制吗
	}
	cout<<sum;
	return 0;
}

2.1.3 十六进制转十进制

接下来,就是重头戏登场了

首先,十六进制与其他进制不同的是

10=A   11=B   12=C   13=D   14=E   15=F

然后,就是取余

如果取余的数字小于等于9

就把数字字符转成数字

否则,把字母字符转成数字,把这个数减‘A’加10(或直接加55)

如果你不知道为什么要加上55,请看VCR

字符       ASCLL码

A                 65

B                 66

C                 67

D                 68

E                 69

F                 70

举个栗子,,15+55=70

70转成ASCLL码就是F

#include<bits/stdc++.h>
using namespace std;
int main()
{
	int k,q=1,sum=0;
	string s;
	cin>>s;
	int n=s.size();
	for(int i=n-1;i>=0;i--)//从低位到高位取 
	{
		if(s[i]>='A'&&s[i]<='F')
		{
			k=s[i]-'A'+10;//将每一位字母字符转成数字 
		}
		else
		{
			k=s[i]-'0';//将每一位数字字符转成数字 
		}
		sum=sum+k*q;//乘权重求和
		q=q*16;//每往前一位,权重扩大16倍 
	}
	cout<<sum;
	return 0;
}

懂?

2.2遗漏掉的十转十六进制

跟之前差不多(第一个for循环)

    int a[105];

    int n,cnt=0;
    cin>>n;
    for(int i=n;i>=1;i=i/16)
    {
        cnt++;
        a[cnt]=i%16;
    }

如果a[i]是个位数,就直接输出

否则输出a[i]加55的char类型

代码,即:

#include<bits/stdc++.h>
using namespace std;
int a[105]; 
int main()
{
	int n,cnt=0;
	cin>>n;
	for(int i=n;i>=1;i=i/16)
	{
		cnt++;
		a[cnt]=i%16;
	}
	for(int i=cnt;i>=1;i--)
	{
		if(a[i]<=9)//个位数直接输出 
		{
			cout<<a[i];
		}
		else//不是个位需要转成字符 
		{
			cout<<char(a[i]+55);
		}
	}
	return 0;
}

(逃!)

新手小白(基础A,不过讲的是基础B)

更多推荐