mirror of
https://git.wolves.top/wolves/leetcode.git
synced 2025-11-05 09:46:32 +08:00
66 lines
1.3 KiB
C
66 lines
1.3 KiB
C
#include <stdio.h>
|
|
#include <stdlib.h>
|
|
|
|
#define MaxSize 100
|
|
|
|
struct stacks{
|
|
int data[MaxSize];
|
|
int top;
|
|
};
|
|
|
|
char *euclidean(int n, int r){
|
|
struct stacks s;
|
|
s.top = -1;
|
|
|
|
// 检查基数范围
|
|
if (r < 2 || r > 36) {
|
|
return NULL; // 无效的基数
|
|
}
|
|
|
|
// 处理 n 为 0 的情况
|
|
if (n == 0) {
|
|
char *result = (char *)malloc(2);
|
|
if (!result) return NULL; // 内存分配失败
|
|
result[0] = '0';
|
|
result[1] = '\0';
|
|
return result;
|
|
}
|
|
|
|
// 处理负数
|
|
int isNegative = 0;
|
|
if (n < 0) {
|
|
isNegative = 1;
|
|
n = -n;
|
|
}
|
|
|
|
while(n > 0){
|
|
if (s.top + 1 >= MaxSize) {
|
|
return NULL; // 栈溢出
|
|
}
|
|
s.data[++s.top] = n % r;
|
|
n = n / r;
|
|
}
|
|
|
|
// 计算需要的内存大小:字符数 + 可能的负号 + 终止符
|
|
int size = s.top + 1 + isNegative + 1;
|
|
char *result = (char *)malloc(sizeof(char) * size);
|
|
if (!result) {
|
|
return NULL; // 内存分配失败
|
|
}
|
|
|
|
int i = 0;
|
|
if (isNegative) {
|
|
result[i++] = '-';
|
|
}
|
|
|
|
while(s.top != -1){
|
|
int value = s.data[s.top--];
|
|
if (value < 10) {
|
|
result[i++] = '0' + value;
|
|
} else {
|
|
result[i++] = 'A' + (value - 10);
|
|
}
|
|
}
|
|
result[i] = '\0';
|
|
return result;
|
|
} |