C语言将十进制非负整数m转换成n进制数n的值的数有012一直到n-1。共n个数字,逢n进一。
时间: 2023-06-07 19:09:09 浏览: 52
对于这个问题,我可以给出一个C语言的转换函数示例:
```c
void convert(int m, int n) {
char map[17] = "0123456789ABCDEF"; // 用于n大于10的情况
char result[100]; // 存储转换结果
int idx = 0; // 结果字符串的下标
// 特判m为0的情况
if (m == 0) {
printf("0");
return;
}
// 不断除以n,用余数计算对应进制下的数字,并存入result数组
while (m > 0) {
result[idx++] = map[m % n];
m /= n;
}
// 反转result数组得到正确的转换结果
for (int i = idx - 1; i >= 0; i--) {
printf("%c", result[i]);
}
printf("\n");
}
```
这个函数可以将非负整数m转换成n进制下的数字。例如,将十进制数23转换成二进制,可以调用`convert(23, 2)`,得到结果`10111`。
相关问题
利用顺序栈将一个非负的十进制整数N转换为对应的B进制数。 c语言
以下是基于顺序栈实现将十进制整数N转换为B进制数的C语言代码:
```c
#include <stdio.h>
#include <stdlib.h>
#define MAX_SIZE 100
typedef int ElemType;
typedef struct {
ElemType data[MAX_SIZE];
int top;
} Stack;
// 初始化栈
void initStack(Stack *s) {
s->top = -1;
}
// 判断栈是否为空
int isEmpty(Stack *s) {
return s->top == -1;
}
// 判断栈是否已满
int isFull(Stack *s) {
return s->top == MAX_SIZE - 1;
}
// 入栈操作
int push(Stack *s, ElemType e) {
if (isFull(s)) {
printf("Stack is full!\n");
return 0;
}
s->top++;
s->data[s->top] = e;
return 1;
}
// 出栈操作
int pop(Stack *s, ElemType *e) {
if (isEmpty(s)) {
printf("Stack is empty!\n");
return 0;
}
*e = s->data[s->top];
s->top--;
return 1;
}
// 将十进制整数N转换为B进制数
void convert(int N, int B) {
Stack s;
initStack(&s);
while (N > 0) {
int remainder = N % B;
push(&s, remainder);
N /= B;
}
ElemType e;
while (!isEmpty(&s)) {
pop(&s, &e);
printf("%d", e);
}
printf("\n");
}
int main() {
int N = 100;
int B = 2;
convert(N, B);
return 0;
}
```
以上代码实现了将十进制整数N转换为B进制数的功能,你可以根据需要调整N和B的值来测试不同的情况。
c语言编码:十六进制字符串转换成十进制非负整数
可以使用C语言的标准库函数`strtol`将十六进制字符串转换成十进制非负整数。具体实现如下:
```c
#include <stdio.h>
#include <stdlib.h>
int main() {
char hex_str[] = "3F8A"; // 十六进制字符串
char *endptr; // 指向转换后第一个无效字符的指针
unsigned long num = strtol(hex_str, &endptr, 16); // 将十六进制字符串转换成十进制非负整数
if (*endptr != '\0') { // 如果转换后还有无效字符,则说明转换失败
printf("转换失败\n");
} else {
printf("转换成功,结果为:%lu\n", num);
}
return 0;
}
```
输出结果为:
```
转换成功,结果为:16266
```
其中,`strtol`函数的第一个参数为待转换的字符串,第二个参数为指向转换后第一个无效字符的指针,第三个参数为进制数。在本例中,进制数为16,表示将字符串按照十六进制数的规则进行转换。如果转换成功,函数返回转换后的十进制非负整数。如果转换失败,则函数返回0。