【发布时间】:2014-09-15 00:03:24
【问题描述】:
我正在尝试创建一种算法,可以将基数为 10 的数字转换为基数为 n 的数字,其中 n 最多为 10。但是,由于某些奇怪的原因,C 中的以下算法在每个基数的某些关键点处失败。例如,对于以 2 为底和以 3 为底的转换,包括 1023 和 52,487 在内的所有数字分别有效,但超出此范围的数字会产生一些奇怪的负面结果。我不知道为什么会这样。谁能帮帮我?
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int returnint;
int baseconvert(int number,int base) {
if(number == 0 || base == 10) {
return returnint;
}
returnint = (number % base) + (10 * baseconvert(number / base, base));
return returnint;
}
int main() {
fprintf(stdout,"%d\n",baseconvert(1023,2));
fprintf(stdout,"%d\n",baseconvert(52487,3));
}
编辑:
以下是上述打印语句的打印结果,如果有帮助的话:
1410065408
-2094967296
【问题讨论】:
-
baseconvert(1023,2)确实在 gcc 中工作,baseconvert(52487,3)很可能是溢出。 -
不是答案,只是一个注释:您在
main()函数中缺少return。 -
@dari 是的
baseconvert(1023,2)和baseconvert(52487,3)工作;这些是作为最高值的示例发布的。正如我在下面对 Mark Wilkin 的帖子所评论的那样,我尝试使用更大的整数,但这不起作用。 -
这里的主要问题是您将整数视为专用于特定基数。整数也用于表示扩展到负范围的事物的计数。您要在
int变量中保存的值是计数,例如,一袋苹果的数量。不管你如何在不同的基础上表示它,那个袋子里都有固定数量的苹果,这个固定数量的苹果要存放在int中。基数仅在输出值时才重要。例如:int n = 20; printf( "%d %x %o", n, n, n );会将n输出为20、14和24。 -
代码有错误。如果基数为 10,则代码返回 'returnint' 但是,var returnint 尚未设置,因此该函数将返回垃圾。
标签: c base base-conversion