c语言写一个代码,可以实现长整数加减除以及二进制和十六进制转换
时间: 2024-02-13 11:03:55 浏览: 81
十进制与十六进制的转换 数据结构c
好的,以下是一个能够实现长整数加减除以及二进制和十六进制转换的 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;
}
```
这个代码可以实现长整数加减除以和十进制转二进制/十六进制的功能。你可以根据需要选择要执行的操作,然后输入相应的参数即可得到结果。注意,这个代码只是示例,可能还有一些未考虑到的情况需要你去完善。
阅读全文