编写一个函数,输入一个十进制数,输出对应的十六进制数。(不能用printf的%x格式说明符)
时间: 2024-02-18 20:05:46 浏览: 129
可以使用除留余数法,将十进制数不断除以16,得到的余数即为每一位的十六进制数,直到商为0为止。然后将得到的余数倒序排列,即为转换后的十六进制数。
下面是一个示例代码:
```C
void dec2hex(int dec, char* hex) {
int remainder;
int i = 0;
while (dec > 0) {
remainder = dec % 16;
if (remainder < 10) {
hex[i] = remainder + '0';
} else {
hex[i] = remainder - 10 + 'A';
}
dec /= 16;
i++;
}
hex[i] = '\0';
// reverse the result
int len = strlen(hex);
for (int j = 0; j < len / 2; j++) {
char temp = hex[j];
hex[j] = hex[len - j - 1];
hex[len - j - 1] = temp;
}
}
```
这个函数接受两个参数,一个是要转换的十进制数,另一个是存放转换结果的字符串数组。在函数内部使用余数计算并将结果存储到字符串数组中,最后将结果倒序排列。
相关问题
用c语言编写一个函数,输入一个十进制数,输出对应的十六进制数。
好的,这里是一个用 C 语言编写的将十进制数转换为十六进制数的函数:
```c
#include <stdio.h>
void dec_to_hex(int decimal)
{
int remainder;
if (decimal == 0)
{
printf("0x0");
return;
}
if (decimal < 0)
{
printf("-");
decimal = -decimal;
}
int hex[100], i = 0;
while (decimal != 0)
{
remainder = decimal % 16;
if (remainder < 10)
{
hex[i] = remainder + 48;
}
else
{
hex[i] = remainder + 55;
}
decimal /= 16;
i++;
}
printf("0x");
for (int j = i - 1; j >= 0; j--)
{
printf("%c", (char)hex[j]);
}
}
int main()
{
int decimal;
printf("请输入一个十进制数:");
scanf("%d", &decimal);
dec_to_hex(decimal);
return 0;
}
```
函数 `dec_to_hex` 将输入的十进制数转换为十六进制数,并输出。如果输入的数为 0,则输出 `0x0`。如果输入的数为负数,则在输出的十六进制数前加上负号。
在 `main` 函数中,我们可以通过 `scanf` 函数获取用户输入的十进制数,并将其作为参数传递给 `dec_to_hex` 函数。
请编写程序,输入十六进制数,输出对应的十进制数。 输入格式 十六进制非负整数 输出格式 对应的十进制非负整数 输入样例 13Ba 输出样例 5050请使用C语言,不使用函数
```c
#include <stdio.h>
#include <string.h>
int hex_to_dec(char hex[]) {
int len = strlen(hex);
int decimal = 0;
int base = 1;
for (int i = len - 1; i >= 0; i--) {
switch (hex[i]) {
case '0':
decimal += base * (hex[i] - '0');
break;
case '1':
decimal += base * 16;
break;
case '2':
decimal += base * 17;
break;
case '3':
decimal += base * 18;
break;
case '4':
decimal += base * 19;
break;
case '5':
decimal += base * 20;
break;
case '6':
decimal += base * 21;
break;
case '7':
decimal += base * 22;
break;
case '8':
decimal += base * 23;
break;
case '9':
decimal += base * 24;
break;
case 'A':
decimal += base * 25;
break;
case 'B':
decimal += base * 26;
break;
case 'C':
decimal += base * 27;
break;
case 'D':
decimal += base * 28;
break;
case 'E':
decimal += base * 29;
break;
case 'F':
decimal += base * 30;
break;
default:
printf("Invalid hexadecimal digit '%c'\n", hex[i]);
return -1;
}
base *= 16;
}
return decimal;
}
int main() {
char hex_input[10];
printf("请输入一个十六进制数(例如:13Ba):");
scanf("%s", hex_input);
int decimal_num = hex_to_dec(hex_input);
if (decimal_num != -1) {
printf("转换后的十进制数是:%d\n", decimal_num);
}
return 0;
}
```
阅读全文