今天孤陋寡闻的我突然发现这个进制转换是可以直接转换的。。。
因为计算机内部都是以二进制进行编码的。
至于之间的计算,就当作十进制计算就好了。
1.以十进制,八进制,十六进制输入。以十进制输出:
2.以十进制输入。以十进制,八进制,十六进制输出:
-----------------------------------以前那个 憨憨的自己 写的---------------------------------
文章目录
1.十六进制数转换成十进制数
2.十进制数转换成十六进制数
3.十六进制数之间的加减法
十六进制数转换成十进制数
题目:输入一个十六进制数,以十进制输出。。。
代码:
#include<stdio.h>
int main()
{
char a[10];
int b=0,len,i=0;
gets(a); //输入十六进制数
len=strlen(a);
if(a[0]=='-'||a[0]=='+') //判断正负数
{
i=1;
}
while(i!=len)
{
b=b*16;
switch(a[i])
{
case 'A':b=b+10;break;
case 'B':b=b+11;break;
case 'C':b=b+12;break;
case 'D':b=b+13;break;
case 'E':b=b+14;break;
case 'F':b=b+15;break;
default:b=b+a[i]-48;
}
i++;
}
if(a[0]=='-')
b=b*(-1);
printf("%d\n",b);
return 0;
}
样例 1 输入:
+A
输出:
10
样例 2 输入:
-1A
输出:
-26
样例 3 输入:
2C
输出:
44
十进制数转换成十六进制数
#include<stdio.h>
int main()
{
char b[17];
long long num;
int i,j;
scanf("%lld",&num); //输入一个整数
i=-1;
if(num<0) //判断 num 的正负
{ printf("-");
num=num*(-1);
}
if(num==0) //若 num 为0,则输出0 后结束运行
{
printf("0\n");
return 0;
}
else //若 num 不为0
{
while(num/16)
{i++; //num连续除以16,并取余
switch(num%16)
{
case 10:b[i]='A';break;
case 11:b[i]='B';break;
case 12:b[i]='C';break;
case 13:b[i]='D';break;
case 14:b[i]='E';break;
case 15:b[i]='F';break;
default:b[i]=num%16+48;
}
num=num/16;
}
if(num%16!=0)
{i++;
switch(num%16)
{
case 10:b[i]='A';break;
case 11:b[i]='B';break;
case 12:b[i]='C';break;
case 13:b[i]='D';break;
case 14:b[i]='E';break;
case 15:b[i]='F';break;
default:b[i]=num%16+48;
}
}
for(;i>=0;i--) //倒序输出
printf("%c",b[i]);
printf("\n");
}
return 0;
}
样例 1 输入:
10
输出:
A
样例 2 输入:
-199
输出:
-C7
样例 3 输入:
-128
输出:
-80
十六进制数之间的加减法
#include<stdio.h>
int main()
{
long long a,b;
scanf("%llx %llx",&a,&b);
if(a+b>=0)
printf("%llx\n",a+b);
else
printf("-%llx\n",-(a+b));
return 0;
}
样例 1 输入:
2C 1A
输出:
46
样例 2 输入:
30 2C
输出:
5c
样例 3 输入:
1A -2C
输出:
-12