首页 > 解决方案 > 为什么这里会出现“被零除”?

问题描述

我一直在尝试使用该程序查找给定数字的长度,但是每次运行它时都会出现以下错误:

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);
            }
       }    
}

标签: cruntime-errorcs50divide-by-zero

解决方案


简单的答案是操作员^没有按照您的期望进行操作。您似乎希望它提高 10 的幂,i^实际上是按位 XOR 运算符。

所以当i是 10 时,你做10 XOR 10的就是零。因此除以零。

你可以看看这个pow函数,但为什么要让事情变得复杂呢?

只需继续潜水 10 直到你得到零,然后返回分区数。

对于非负值是这样的:

#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

推荐阅读