首页 > 解决方案 > 返回意外值的基本程序

问题描述

我编写了一个程序来对用户的长号码进行一些基本操作。根据最终产品是否以 0 结尾,程序 printfs “有效”或“无效”。我尝试了一些 10 位数字,它工作正常,但任何 11 位或更高位的数字都只会返回“浮点异常”。我是否需要以某种方式更改语法以适应更长的数字?

int main(void)
{
    long i = 0;
    long b;
    int m = 10;
    int n = 1;
    long number = get_long("Number?\n");
    do
    {
        long a = number % m;
        b = number - a;
        long c = b % (m * 10);
        long d = c / m;
        long e = d *2;
        if (e < 9)
        {
            i = i + e;
        }
        else
        {
            i = i + (e - 10 + 1);
        }
        
        {
            m = m * 100;
        }
    }
    while (b > 0);
    do
    {
        long a = number % n;
        b = number - a;
        long c = b % (n * 10);
        long d = c / n;
        long e = d *2;
        if (e < 9)
        {
            i = i + e;
        }
        else
        {
            i = i + (e - 10 + 1);
        }
        
        {
            n = n * 100;
        }
    }
    while (b > 0);
    int f = i % 10;
    if (f == 0)
    {
        printf("valid");
    }
    else
    {
    printf("invalid\n");
    }
}

标签: cfloating-point-exceptions

解决方案


推荐阅读