我一直在研究一个程序,当执行时,会要求两个数字,第一个是任意十进制数,第二个数字是你希望转换为的基数(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");
}
答案 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]);