问题与十六进制
我得到一些家庭作业,但我堆在里面。 也许你可以帮助我。 下面的任务。
读取十进制系统中的键盘整数并建立一个新的数字系统。
在新记号中写入的控制台编号中输出。
我只做了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