我的数字转换器(十进制到基数2-16)以相反的顺序打印数字

时间:2013-10-03 19:23:05

标签: c

我一直在研究一个程序,当执行时,会要求两个数字,第一个是任意十进制数,第二个数字是你希望转换为的基数(2-16)。它有效,除了一件事。每个输出都是向后的。这是预期的,它需要剩余并按计算顺序输出它们。但是我希望它们以相反的顺序出现。我正在考虑设置一个循环并将余数存储在一个数组中,然后向后遍历数组并吐出信息。但我是C的新手,我无法让它发挥作用!告诉我你的想法!

非常感谢任何帮助。我已经坚持了一段时间。

#include <stdio.h>
#include <stdlib.h>

int main(void){

  int x, y, z, c; //Sets up variables to be used in program


  printf("Please enter two integers: "); //Asks for user input
  scanf("%d", &x);
  scanf("%d", &y); //stores input

  printf("%d\n", x);
  printf("%d\n", y);
  printf(" \n");

  if(y < 2 || y > 16){
    printf("You have entered incorrect information.\n");
           return 0;
  } //bug checks

  else if(y > 1 && y < 17){

    while(x != 0){
       c = (x%y);
       x = (x/y); // Loops numbers until a 0 value is reached, can be used with
                  // any Base

     if( c == 10){
        c = printf("A");
    }else if( c == 11){
        c = printf("B");
    }else if( c == 12){
        c = printf("C");
    }else if( c == 13){
        c = printf("D");
    }else if( c == 14){
        c = printf("E");
    }else if( c == 15){
        c = printf("F");
    }else{
        printf("%d", c);
    }
        // Returns for each remainer option
    }
    printf("\n");
  }
     // Returns for each remainer option
    printf("\n");
}

3 个答案:

答案 0 :(得分:0)

将所有剩余部分保留在字符数组中并反向打印数组

答案 1 :(得分:0)

另一种方法是递归方法(对于很长的序列,我不推荐这种方法,但由于整数的位数有限,你可以知道递归的深度)。它看起来像这样(没有经过测试,有点伪代码):

printnum(int n, int b)
{ int r;

  if (n < b)
    output n;
  else
  { r = n % b;
    printnum(n/b, b)
    output r;
  }
}

一个好的优化器甚至可以在编译时透明地将它转换为非递归代码。

答案 2 :(得分:0)

声明

int i = 0;
int rev[50];  

并将您的代码更改为

if( c == 10){
    rev[i++] = 'A' ;
}else if( c == 11){
    rev[i++] = 'B' ;
}else if( c == 12){
    rev[i++] = 'C' ;
}else if( c == 13){
    rev[i++] = 'D' ;
}else if( c == 14){
    rev[i++] = 'E' ;
}else if( c == 15){
    rev[i++] = 'F' ;
}else{
    rev[i++] = 48 + c;
}
    // Returns for each remainer option
}
printf("\n");
}
while(--i >= 0) 
    printf("%c", rev[i]);