用C语言数组写一个各种进制相互转换的函数
时间: 2024-03-25 15:40:24 浏览: 15
好的,以下是一个用C语言数组写的各种进制相互转换的函数:
```c
void convert(int num, int base) {
char digits[] = "0123456789ABCDEF";
char result[64];
int i = 0;
if (num == 0) {
printf("0");
return;
}
while (num != 0) {
result[i] = digits[num % base];
num /= base;
i++;
}
for (int j = i - 1; j >= 0; j--) {
printf("%c", result[j]);
}
}
```
这个函数接收两个参数:待转换的数和目标进制。它通过除以目标进制的余数来逐位生成转换后的数。digits数组包含了0~F的字符表示,result数组则用来保存每一位上的字符。最后,我们将result数组中的字符逆序输出,即可得到转换后的结果。
例如,convert(77, 2)的输出为: 1001101。
相关问题
用C语言数组写一个各种进制之间相互转换的函数
好的,我可以为你编写一个将任意进制的数转换为十进制数,以及将十进制数转换为任意进制数的函数。以下是示例代码:
```c
#include <stdio.h>
#include <string.h>
// 将任意进制的数转换为十进制数,参数依次为:数值字符串、原进制数
int baseToDec(char str[], int base) {
int len = strlen(str);
int dec = 0;
for (int i = 0; i < len; i++) {
int digit = str[i] - '0';
if (digit >= base) {
digit = str[i] - 'A' + 10; // 大写字母转为数字
}
dec = dec * base + digit;
}
return dec;
}
// 将十进制数转换为任意进制的数,参数依次为:十进制数、目标进制数
void decToBase(int dec, int base) {
if (dec == 0) {
return;
}
decToBase(dec / base, base);
int digit = dec % base;
if (digit < 10) {
printf("%d", digit);
} else {
printf("%c", digit - 10 + 'A'); // 数字转为大写字母
}
}
int main() {
char str[100];
int base1, base2;
printf("请输入待转换的数值:");
scanf("%s", str);
printf("请输入原进制数:");
scanf("%d", &base1);
printf("请输入目标进制数:");
scanf("%d", &base2);
int dec = baseToDec(str, base1);
printf("转换后的值为:");
decToBase(dec, base2);
printf("\n");
return 0;
}
```
你可以将上述代码复制到 C 语言的编译器中运行,输入待转换数值、原进制数和目标进制数,即可得到转换后的结果。注意,此函数只支持转换 2~36 进制之间的数值。
用C语言写十进制转换八进制,不用数组 写出程序
### 回答1:
答:
#include<stdio.h>
int main()
{
int n, oct;
printf("输入一个十进制数:");
scanf("%d", &n);
oct = 0;
int i = 1;
while(n != 0)
{
oct += (n % 8) * i;
n /= 8;
i *= 10;
}
printf("八进制数为:%d", oct);
return 0;
}
### 回答2:
在C语言中,可以使用以下程序将十进制数转换为八进制数,不使用数组:
```c
#include <stdio.h>
void decimalToOctal(int num) {
int octal = 0, remainder, place = 1;
while (num != 0) {
remainder = num % 8; // 获取余数
num /= 8; // 更新商
octal += remainder * place; // 将余数乘以当前位数的权值,并加到八进制数中
place *= 10; // 更新位数
}
printf("八进制数为:%d\n", octal);
}
int main() {
int decimal;
printf("请输入十进制数: ");
scanf("%d", &decimal);
decimalToOctal(decimal);
return 0;
}
```
此程序中,首先定义了一个函数`decimalToOctal`,用于将十进制数转换为八进制数。将输入的十进制数`num`每次除以8,取得的余数即为八进制数的每一个位上的数字,将余数乘以当前位数的权值,再加到八进制数中即可。最后,将八进制数打印出来。
在`main`函数中,首先读取输入的十进制数,然后调用`decimalToOctal`函数进行转换,最后返回0表示程序执行成功。
请注意,在此程序中,我们没有使用数组来存储八进制数的每一位,而是直接通过循环计算得出并输出八进制数。
### 回答3:
下面是使用C语言编写的将十进制数转换为八进制的程序,不使用数组。
```
#include <stdio.h>
void decimalToOctal(int decimal) {
int octal = 0, i = 1;
while (decimal != 0) {
octal += (decimal % 8) * i;
decimal /= 8;
i *= 10;
}
printf("转换为八进制数为:%d\n", octal);
}
int main() {
int decimal;
printf("请输入一个十进制数:");
scanf("%d", &decimal);
decimalToOctal(decimal);
return 0;
}
```
程序中定义了一个`decimalToOctal`函数,用于将十进制数转换成八进制数。首先初始化一个八进制数`octal`和一个辅助变量`i`,初始值为1。然后使用`while`循环,当十进制数不为0时,执行以下操作:
- 将十进制数的最后一位取模8,并乘以辅助变量`i`,加到八进制数中。
- 将十进制数整除8,去掉最后一位。
- 辅助变量`i`乘以10,以便下一位的操作。
最后,输出转换后的八进制数。在`main`函数中,需要用户输入一个十进制数,然后调用`decimalToOctal`函数进行转换,并输出结果。