问题与十六进制

我得到一些家庭作业,但我堆在里面。 也许你可以帮助我。 下面的任务。

读取十进制系统中的键盘整数并建立一个新的数字系统。

在新记号中写入的控制台编号中输出。

我只做了2到10个系统,而且我不能从10到36.我试图在第二个循环中做这样的事情:

if ( result > 9 ) {
    printf("%c", 55+number);
} else {
    printf("%d", result);
}

我的代码:

#include <stdio.h>

int main() {
    int number, base;
    int i, result;

    scanf("%d %d", &number, &base);

    if ( number < base ) {
        printf("%dn", number);
    } else {
        for ( i = base; i <= number / base; i *= base );
        for ( int j = i; j >= base; j /= base ) {
            result = number / j;
            printf("%d", result);
            number = number % j;
        }
        printf("%dn", number%base);
    }
    return 0;
}

else条件需要一些更改:
1.数值转换需要应用于内部循环和最终的printf("%dn", number % base) 。 不要在两个地方都添加,只需让循环运行到j > 0 ,而不是j >= base并且只用n的最后一个printf()
2.而不是使用幻数55使用result - 10 + 'A' 。 它更容易理解,并且不依赖于ASCII - (取决于A,B,C ...是连续的)。
其余的都是好的。

@nos指出if()条件的问题。
所以删除if ( number < base ) { ... else {并改变for (i = base; to for (i = 1; make a more simple solution。

  // } else {
    for (i = 1; i <= number / base; i *= base)
      ;
    int j;
    // for (j = i; j >= base; j /= base) {
    for (j = i; j > 0; j /= base) {
      result = number / j;
#if 1
      if (result > 9) {
        // printf("%c", 55 + result);
        printf("%c", result - 10 + 'A');
      } else {
        printf("%d", result);
      }
#else
      printf("%d", result);
#endif      
      number = number % j;
    }
    printf("n");
  // }

int number, base;
scanf("%d %d", &number, &base);

int divisor = base;
while (divisor <= number)
    divisor *= base;

while (divisor != 1) {
    divisor /= base;
    int digit = number / divisor;
    number -= digit * divisor;
    printf("%c", digit <= 9 ? digit + '0' : digit + 'A' - 10);
}
printf("n");
return 0;

警告:数字大于200000000的未定义行为。


你在正确的轨道上,非常接近答案。 你的程序在两个地方打印结果数字。

我建议让一个函数输出数字并在两个地方使用它:

void print_digit(int number) {
  // your code here
}
链接地址: http://www.djcxy.com/p/74295.html

上一篇: Problems with hex

下一篇: String conversion to undefined/null/number/boolean