我得到一些作业,但我堆叠在里面。也许你可以帮助我。下面的任务。
读取十进制系统中的键盘整数并建立新的数字系统。
以新表示法编写的控制台编号输出。
我只为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("%d\n", 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("%d\n", number%base);
}
return 0;
}
答案 0 :(得分:2)
else
条件需要进行一些更改:
1.数值转换需要应用于内循环和到最终printf("%d\n", number % base)
。不要在两个地方添加,只需将循环设置为j > 0
,而不是j >= base
,而只使用printf()
的最后\n
。
2.而不是使用幻数55
使用result - 10 + 'A'
。它更容易理解,也不依赖于ASCII - (取决于A,B,C ......是连续的)
其余的都没问题。
[编辑]
@nos指出了if()
条件的问题
因此,请删除if ( number < base ) { ... else {
并将for (i = base;
更改为for (i = 1;
,从而制定更简单的解决方案。
// } 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");
// }
答案 1 :(得分:1)
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的数字的未定义行为。
答案 2 :(得分:1)
你走在正确的轨道上并且非常接近答案。您的程序正在两个位置打印结果数字。
我建议使用单个函数输出数字并在两个地方使用它:
void print_digit(int number) {
// your code here
}
答案 3 :(得分:0)
您可以添加字符和整数,请尝试更类似的内容:
'A' + // some int value
答案 4 :(得分:0)
另一方面,如果一个人喜欢不在/溢出的解决方案,则将所有INT_MIN处理为INT_MAX,不处理UB,只输入INT_MIN&lt; = number&lt; = INT_MAX,2&lt; = base&lt; = 36 ,和你不介意递归。
#include <stdio.h>
#include <stdlib.h>
void print_digit(int x, int base) {
int quot, rem;
quot = x/base;
if (quot) {
print_digit(quot, base);
}
rem = abs(x%base);
if (rem > 9) {
printf("%c", rem - 10 + 'A');
} else {
printf("%d", rem);
}
}
int main() {
int number, base;
scanf("%d %d", &number, &base);
if (number < 0) {
printf("-");
}
print_digit(number, base);
printf("\n");
return 0;
}