1
0

euclidean.c 1.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #define MaxSize 100
  4. struct stacks{
  5. int data[MaxSize];
  6. int top;
  7. };
  8. char *euclidean(int n, int r){
  9. struct stacks s;
  10. s.top = -1;
  11. // 检查基数范围
  12. if (r < 2 || r > 36) {
  13. return NULL; // 无效的基数
  14. }
  15. // 处理 n 为 0 的情况
  16. if (n == 0) {
  17. char *result = (char *)malloc(2);
  18. if (!result) return NULL; // 内存分配失败
  19. result[0] = '0';
  20. result[1] = '\0';
  21. return result;
  22. }
  23. // 处理负数
  24. int isNegative = 0;
  25. if (n < 0) {
  26. isNegative = 1;
  27. n = -n;
  28. }
  29. while(n > 0){
  30. if (s.top + 1 >= MaxSize) {
  31. return NULL; // 栈溢出
  32. }
  33. s.data[++s.top] = n % r;
  34. n = n / r;
  35. }
  36. // 计算需要的内存大小:字符数 + 可能的负号 + 终止符
  37. int size = s.top + 1 + isNegative + 1;
  38. char *result = (char *)malloc(sizeof(char) * size);
  39. if (!result) {
  40. return NULL; // 内存分配失败
  41. }
  42. int i = 0;
  43. if (isNegative) {
  44. result[i++] = '-';
  45. }
  46. while(s.top != -1){
  47. int value = s.data[s.top--];
  48. if (value < 10) {
  49. result[i++] = '0' + value;
  50. } else {
  51. result[i++] = 'A' + (value - 10);
  52. }
  53. }
  54. result[i] = '\0';
  55. return result;
  56. }
备用站点 当前处于降级运行的备用站点,仅供应急访问,数据和功能可能不是最新。