我是C初学者,我正在写一个程序,该程序基本上将十进制数转换为以6为基数,但是第五位以上的数字不会显示。 当我输入56400作为要转换的数字时,程序的输出是13040而不是1113040,这是正确的答案。
我记得java使用数组的方式,因此我搜寻了一种创建动态大小数组的方式。我发现使用alloc和malloc我基本上永远不会耗尽我的数组空间。我不太了解它,因为我没有看到指针和所有爵士乐,最后,我也不知道如何实现它。所以我决定尝试不同的方法:
首先:算法本身是不可能的。它可以显示一个数字,其位数不超过5,而您自己尝试一下,基本上可以给出正确的答案。 第二:我试图定义数组的大小,以了解这是否是问题所在。因此,我将数组定义为具有8个元素,然后发生的事情是,如果我的十进制数给出的base6包含8位数字,则该数字可以正确显示,如果不正确,则它给出的真是奇数,例如-7600或-200万左右。 / p>
这是代码:我的主要方法和将数字转换为6的函数,我认为问题出在这里。
/*Translations:
residuo: remainder
division: quotient of a division
adicion: sum, addition
numeroBase6: my number in base 6*/
int toBase6(int number) {
int division = number;
int residuo;
int y = 1;
int numeroBase6[y];
int adicion = 0;
int numSix = 0;
residuo = division % 6;
division = division / 6;
numeroBase6[0] = residuo;
while(division > 0) {
residuo = division % 6;
division = division / 6;
if(division >= 0){
numeroBase6[y] = residuo;
y++;
}else {
numeroBase6[y] = division;
}
}
for(int x = 0; x <= sizeof numeroBase6; x++) {
adicion = numeroBase6[x] * pow(10, x);
numSix += adicion;
}
return numSix;
}
我的主要方法是:
int num1;
int resultado;
printf("Escriba un numero en decimal: "); //Print "Write your decimal number"
scanf("%d", &num1);
resultado = toBase6(num1);
printf("\nNumero en base 6 es: %d\n", resultado); //Print "Your number in base 6 is: "
所以我想知道的是如何显示大于5的数字数组?
答案 0 :(得分:1)
执行此操作时:
int y = 1;
int numeroBase6[y];
您创建一个大小为1的数组,该数组将始终为该大小。大小不会因为y
的值而改变。结果,您在数组的末尾写了第一个数字之后的每个数字。这将调用undefined behavior。
基数6的位数不应超过基数10的位数的两倍,并且32位int最多具有10个十进制数字,因此只需将数组定义为具有25个元素。这应该足以覆盖所有可能的值。
int numeroBase6[25];
此外,如果您尝试对以6为基数的数字进行十进制编码:
for(int x = 0; x <= sizeof numeroBase6; x++) {
adicion = numeroBase6[x] * pow(10, x);
numSix += adicion;
}
return numSix;
您可能最终溢出int
可以容纳的内容。而是这样做,直接创建字符串表示形式并返回字符串。