首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在BASE62中打印第一个N号

在BASE62中打印第一个N号
EN

Stack Overflow用户
提问于 2015-04-07 13:51:14
回答 3查看 409关注 0票数 2

我想先用BASE62编码打印N个数字。我的密码怎么了?

代码语言:javascript
复制
const char ALPHABET[63] = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";

int main(void) {
    int N = 50;
    for (int i = 0; i < N; i++) {
        int base62 = ALPHABET[i % 62];
        printf("Base 62: %s\n", (char*)base62);
    }
}
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2015-04-07 14:38:45

您需要打印出表示base62中的数字的字符串。对于N >= 62,您将有一个多字符字符串.首先,您需要计算base62表示中的数字数,然后逐字符显示。

为此,你需要做这样的事情-

代码语言:javascript
复制
// Count the number of characters the number will need
int num_digits(int num) {
   int count=0;
   while(num > 0) {
      num /= 62;
      count++;
   }
   if(count == 0)
      count = 1;
   return count;
}

int main() {
   const char ALPHABET[63] = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
   int i, N=100;
   char STR[10];

   for (i = 0; i < N; i++) {
      int num = i;
      int digits = num_digits(num);
      STR[digits] = '\0';

      while(num > 0) {
         char base62 = ALPHABET[num % 62];
         STR[--digits] = base62;
         num /= 62;
      }

      if(i == 0)
         STR[--digits] = ALPHABET[0];
      printf("%s\n", i, STR);
   }
}
票数 1
EN

Stack Overflow用户

发布于 2015-04-07 14:02:57

ALPHABET是一个字符数组,所以您应该可以使用char base 62 ...printf("Base 62: %c\n", base62);

将普通的int转换为指针,并将其传递给printf (如原始代码中的那样),将导致printf产生无效的内存读取(未定义的行为)。

票数 2
EN

Stack Overflow用户

发布于 2015-04-07 17:21:11

接受简化后

正如Cool Guy所评论的那样,printf("Base 62: %s\n", (char*)base62);不会将int转换为所需的字符数组。下面的代码分解了这个值,一次只有一个基数-62个字符。

代码语言:javascript
复制
void print_base(unsigned n, unsigned base) {
  static const char ALPHABET[] =
      "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
  if (n >= base) {
    print_base(n / base, base);
  }
  fputc(ALPHABET[n % base], stdout);
}

#include <stdio.h>
int main(void) {
  print_base(100, 10); // 100
  puts("");
  print_base(100, 16); // 64
  puts("");
  print_base(100, 62); // 1C
  puts("");
  return 0;
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29493247

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档