在C中编写一个程序,它采用自然数n和基数b,并在b中输出n的数字

时间:2016-12-19 17:38:17

标签: c numbers base

我需要用C语言编写一个程序,它将采用自然数n和基数b(假设b在区间[2,10]中),并将从左边输出数字n的数字,从左边开始对。例如,如果n = 38且b = 3,则输出应为1102.这是我尝试过的:

#include<stdio.h>

int main(void) {

    int n,b,number=0,digit=0;
    scanf("%d", &n);
    scanf("%d", &b);

    while(n>0) {
    digit=n%b;
    number=number*10+digit;
    n=n/b;
    }

    while(number>0) {
    printf("%d", number%10);
    number=number/10;
    }

    return 0;
}

这适用于n = 38和b = 3,但如果我采用例如n = 8且b = 2,则输出为1,当它应为1000时。如何解决此问题?

1 个答案:

答案 0 :(得分:2)

使用缓冲区来编写解决方案是个更好的主意:

void print_base(int n, int b)
{
  static char const digits[] = "0123456789ABCDEF";
  char buffer[16] = { '\0' };
  char * buff = buffer + 15;

  if ((b >= sizeof digits) || (b <= 1))
    return; // error
  for (; n > 0; n /= b)
    *--buff = digits[n % b]; // move the char pointer backward then write the next digit
  printf("%s\n", buff);
}

你必须在你的缓冲区中向后写(或者向前写,然后反转字符串)因为你的方法,你首先得到最小的数字。