为什么这里会出现"division by zero"?
Why does a "division by zero" occur here?
我一直在尝试使用此程序查找给定数字的长度,但是每次 运行 我都会收到以下错误:
check_length.c:16:26:运行时间错误:被零除
#include <cs50.h>
#include <stdio.h>
void check_length(long);
int main(void)
{
long c = get_long("Enter Number: ");
check_length(c);
}
void check_length(long w)
{
for(int i=1;i<=16;i++)
{
int scale = w/((10)^i);
if (scale<10 && scale>0)
{
int length = i+1;
printf("%i\n",length);
}
}
}
简单的答案是运算符 ^
没有按照您的预期进行。看起来你希望它增加 10 的 i
次方,但 ^
实际上是按位异或运算符。
所以当 i
是 10 时,你做 10 XOR 10
是零。因此除以零。
您可以改为查看 pow
函数,但为什么要把事情搞得那么复杂?
只需继续潜水 10,直到得到零,然后 return 分区数。
对于非负值,类似这样:
#include<stdio.h>
int check_length(unsigned long w)
{
int result = 0;
while (w > 0)
{
++result;
w = w/10;
}
return result;
}
int main()
{
printf("%d\n", check_length(0));
printf("%d\n", check_length(9));
printf("%d\n", check_length(10));
printf("%d\n", check_length(1234567890));
return 0;
}
输出:
0
1
2
10
我一直在尝试使用此程序查找给定数字的长度,但是每次 运行 我都会收到以下错误:
check_length.c:16:26:运行时间错误:被零除
#include <cs50.h>
#include <stdio.h>
void check_length(long);
int main(void)
{
long c = get_long("Enter Number: ");
check_length(c);
}
void check_length(long w)
{
for(int i=1;i<=16;i++)
{
int scale = w/((10)^i);
if (scale<10 && scale>0)
{
int length = i+1;
printf("%i\n",length);
}
}
}
简单的答案是运算符 ^
没有按照您的预期进行。看起来你希望它增加 10 的 i
次方,但 ^
实际上是按位异或运算符。
所以当 i
是 10 时,你做 10 XOR 10
是零。因此除以零。
您可以改为查看 pow
函数,但为什么要把事情搞得那么复杂?
只需继续潜水 10,直到得到零,然后 return 分区数。
对于非负值,类似这样:
#include<stdio.h>
int check_length(unsigned long w)
{
int result = 0;
while (w > 0)
{
++result;
w = w/10;
}
return result;
}
int main()
{
printf("%d\n", check_length(0));
printf("%d\n", check_length(9));
printf("%d\n", check_length(10));
printf("%d\n", check_length(1234567890));
return 0;
}
输出:
0
1
2
10