Создание функции для определения количества цифр - PullRequest
0 голосов
/ 04 августа 2020

В настоящее время я работаю над курсом CS50 и пытаюсь создать функцию, которая может выдавать мне количество цифр в числе, которое я ввожу. Например, номер 10323 будет 5-значным. Я написал для этого код, но похоже, что он не работает для случая, когда длина превышает 10 цифр. Могу ли я узнать, что не так с этим кодом?

PS: CS50 использует измененный C язык для начинающих. Язык может выглядеть немного по-другому, но я думаю, что проблема здесь в математике, поэтому не должно возникнуть особых трудностей с просмотром моего кода?

int digit(int x) //function gives digit of a number
{
    if (x == 0)
    {
    return 0;    
    }
    else
    {
        int dig = 0;
        int n = 1;
        int y;
        do
        {
            y = x / n;
            dig ++;
            n = expo(10,dig);
        }   
        while (y < 0 || y >= 10);
        return dig;
    }
}

Ответы [ 2 ]

1 голос
/ 04 августа 2020

Вы не предоставили определение функции expo(), поэтому невозможно сказать, почему функция digit() не работает.

Однако вы работаете с int переменные. Спецификация размера типа int зависит от реализации. Различные компиляторы могут иметь целые числа разного размера. И даже данный компилятор может иметь разные размеры в зависимости от параметров компиляции.

Если конкретный компилятор, который использует ваш класс CS50, имеет 16-битные целые числа (вряд ли в наши дни, но теоретически возможно), эти значения будут go от 0 (0x0000) до 32767 (0x7FFF), а затем переходите к -32768 (0x8000) и до 01 (0xFFFF). Таким образом, в этом случае ваша функция digit будет обрабатывать только часть диапазона до 5 десятичных цифр.

Если ваш компилятор использует 32-битные целые числа, тогда ваши целые числа будут go из 0 (0x00000000) до 2147483647 (0x7FFFFFFF), затем обернуть до -2147483648 (0x80000000) и до -1 (0xFFFFFFFF), таким образом ограничившись частью 10-битного диапазона.

Я собираюсь go рискните и угадайте, что у вас есть 32-битные целые числа.

Вы можете получить дополнительный бит, используя тип unsigned int везде, где вы говорите int. Но в основном вы будете ограничены компилятором и реализацией.

Если вы хотите получить количество десятичных цифр в гораздо больших значениях, вам рекомендуется использовать строковый ввод, а не numeri c ввод. Тогда вы просто посмотрите на длину строки. В качестве дополнительного вознаграждения вы также можете убрать начальные 0, возможно, опустить начальный знак плюса, возможно, опустить запятые в строке. И было бы неплохо распознать недопустимые строки с неожиданными нечисловыми c символами. Но в основном все это зависит от изучения этих строковых функций.

0 голосов
/ 21 августа 2020
"while(input>0)
    {
        input=input/10;
        variable++;
    }
    printf("%i\n",variable);"

связать вход с этим.

...