为什么这里会出现"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