我不知道出了什么问题,为什么我会收到这个错误。我四处搜寻,我无法理解我的生活。
void print_arb_base(unsigned int n, unsigned int b) {
char output[36] = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z'};
int t = n; //Keep track of the number
int s = 0; //The space we are currently on
while(pow(b, s) < t) {
s++;
}
s--;
for(int i = s; i >= 0; i--) {
int r = t % pow(b, i); //Gets number that goes into this part of base number
t = t - r * pow(b, i);
printf("%c", output[r]);
}
}
答案 0 :(得分:2)
模数运算符(%)仅适用于整数操作数,而pow()返回double。您需要将其结果转换为整数类型,或者更安全地使用类似lrint()的调用,该调用将舍入到最接近的整数结果。也许你的意思是:
int r = t % lrint(pow(b, i));
如果您尝试在任意基础上打印数字,那么您可能意味着:
unsigned long div = b;
while (div <= t)
div *= b;
div /= b;
for(; 0 != div; div /= b) {
unsigned long d = t / div;
t -= d * div;
printf("%c", output[d]);
}
答案 1 :(得分:0)
函数pow
返回一个double值。
你不能用int值修改它。
你可以做到
int r = t % (int)pow(b, i);
要摆脱错误,但它可能会或可能不会做你想要的。