| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566 |
- #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;
- }
|