(突然发现可以直接转换。。。)C语言 之 十六进制数与十进制数的相互转换。十六进制数的加减法

今天孤陋寡闻的我突然发现这个进制转换是可以直接转换的。。。
因为计算机内部都是以二进制进行编码的。

至于之间的计算,就当作十进制计算就好了。

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

好的,以下是一个能够实现长整加减除以及二进制和十六进制转换的 C 语言代码示例: ```c #include <stdio.h> #include <stdlib.h> #include <string.h> #define MAX_LEN 1000 // 长整加法 void add(char num1[], char num2[], char result[]) { int carry = 0, sum, i; int len1 = strlen(num1), len2 = strlen(num2); int max_len = len1 > len2 ? len1 : len2; // 从最低位开始逐位相加 for (i = 0; i < max_len; i++) { int a = i < len1 ? num1[len1 - 1 - i] - '0' : 0; int b = i < len2 ? num2[len2 - 1 - i] - '0' : 0; sum = a + b + carry; result[max_len - i] = sum % 10 + '0'; carry = sum / 10; } // 处理最高位的进位 if (carry) { result[0] = carry + '0'; } else { // 如果最高位没有进位,需要将结果整体左移一位 for (i = 0; i < max_len; i++) { result[i] = result[i + 1]; } } } // 长整减法 void subtract(char num1[], char num2[], char result[]) { int borrow = 0, diff, i; int len1 = strlen(num1), len2 = strlen(num2); int max_len = len1 > len2 ? len1 : len2; // 从最低位开始逐位相减 for (i = 0; i < max_len; i++) { int a = i < len1 ? num1[len1 - 1 - i] - '0' : 0; int b = i < len2 ? num2[len2 - 1 - i] - '0' : 0; diff = a - b - borrow; if (diff < 0) { diff += 10; borrow = 1; } else { borrow = 0; } result[max_len - i - 1] = diff + '0'; } // 去除前导零 while (result[0] == '0') { for (i = 0; i < max_len - 1; i++) { result[i] = result[i + 1]; } max_len--; } result[max_len] = '\0'; } // 长整除法 void divide(char num1[], int num2, char result[]) { int quotient[MAX_LEN]; int i, j, len1 = strlen(num1); long long dividend = 0; // 从最高位开始逐位除以 num2 for (i = 0, j = 0; i < len1; i++) { dividend = dividend * 10 + (num1[i] - '0'); quotient[j++] = dividend / num2; dividend %= num2; } // 去除前导零 while (j > 1 && quotient[j - 1] == 0) { j--; } // 将商转换为字符串 for (i = 0; i < j; i++) { result[i] = quotient[j - 1 - i] + '0'; } result[j] = '\0'; } // 十进制转二进制 void decimal_to_binary(int num, char result[]) { int i = 0; while (num > 0) { result[i++] = num % 2 + '0'; num /= 2; } // 倒序输出 for (int j = i - 1; j >= 0; j--) { printf("%c", result[j]); } printf("\n"); } // 十进制十六进制 void decimal_to_hex(int num, char result[]) { int i = 0, rem; while (num > 0) { rem = num % 16; if (rem < 10) { result[i++] = rem + '0'; } else { result[i++] = rem - 10 + 'A'; } num /= 16; } // 倒序输出 for (int j = i - 1; j >= 0; j--) { printf("%c", result[j]); } printf("\n"); } int main() { char num1[MAX_LEN], num2[MAX_LEN], result[MAX_LEN]; int num; int choice; printf("请选择要执行的操作:\n"); printf("1. 长整加法\n"); printf("2. 长整减法\n"); printf("3. 长整除法\n"); printf("4. 十进制转二进制\n"); printf("5. 十进制十六进制\n"); printf("请输入选项(1-5):"); scanf("%d", &choice); switch (choice) { case 1: printf("请输入第一个长整:"); scanf("%s", num1); printf("请输入第二个长整:"); scanf("%s", num2); add(num1, num2, result); printf("结果为:%s\n", result); break; case 2: printf("请输入第一个长整:"); scanf("%s", num1); printf("请输入第二个长整:"); scanf("%s", num2); subtract(num1, num2, result); printf("结果为:%s\n", result); break; case 3: printf("请输入长整:"); scanf("%s", num1); printf("请输入除:"); scanf("%d", &num); divide(num1, num, result); printf("结果为:%s\n", result); break; case 4: printf("请输入十进制:"); scanf("%d", &num); printf("结果为:"); decimal_to_binary(num, result); break; case 5: printf("请输入十进制:"); scanf("%d", &num); printf("结果为:"); decimal_to_hex(num, result); break; default: printf("输入无效!\n"); break; } return 0; } ``` 这个代码可以实现长整加减除以和十进制转二进制/十六进制的功能。你可以根据需要选择要执行的操作,然后输入相应的参即可得到结果。注意,这个代码只是示例,可能还有一些未考虑到的情况需要你去完善。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值