将数字从基数n转换为整数

时间:2013-09-16 23:39:39

标签: c radix

所以我希望得到一点指导。我有一个带基数(基数)的函数,然后使用getchar()将获得从给定基数转换为整数表示的数字。

给出的唯一参数是基数,然后getchar()通过命令行获取数字表示。

所以,如果我通过

str2int 16
input a number: 3c

它应输出(16 ^ 1 * 3)+(16 ^ 0 * 12)= 48 + 12 = 60

我完全理解数学,以及转换基础的不同方法,但不知道如何编写某些内容。数学总是比代码容易得多,至少对我而言。

另一种计算方法是: (702)base 15 = 15 * 7 + 0 = 105; 15 * 105 + 2 = 1577

我不知道如何使用getchar()在C中表达这个?是否可以不使用数学函数?

1 个答案:

答案 0 :(得分:0)

一次只能获得一个char,直到不需要数字或不再需要数字。

unsigned shparkison(unsigned base) {
  unsigned sum = 0;
  int ch;
  while ((ch = getchar()) != EOF) {
    // one could instead look up the toupper(value) in an array "0123...ABC...Z"; 
    // Following assumes ASCII
    if (isdigit(ch)) ch -= '0';
    else if (islower(ch)) ch -= 'A' - 10;
    else if (isupper(ch)) ch -= 'a' - 10;
    else {
      break; // Not a digit
    }
    if (ch >= base) {
      break; // Digit too high
    }
    unsigned sum_old = sum;
    sum *= base;
    sum += ch;
    if (sum < sum_old) {
      sum = sum_old;
      break; // Overflow
    }
  }
  ungetc(ch, stdin);
  return sum;
}