C ++ нужно выяснить, почему этот цикл не работает - PullRequest
0 голосов
/ 03 ноября 2019

Мне нужно найти количество цифр, которое имеет каждое число от 1 до 40. Похоже, должно быть просто использовать циклы for и while, но я не могу заставить его работать.

Я попытался сделать это с помощью "cin >> a;", введя значение "a"с клавиатуры и цикла while отлично работал для любого числа, которое я ввел, но когда я пытаюсь сделать это с помощью цикла for, он не работает, поэтому проблема должна быть там.

int main()
    {
        int a; //initially found number
        int digits=0; //number of digits number "a" has
        int temp; // temporary number "a"

    for(a=1;a<=40;a++) // takes a number, starting from 1
    {
        temp=a;

        while(temp!=0) //finds number of digits the number "a" has
        {
            temp=temp/10;
            digits++;
        }
        cout<<digits<<endl; //prints number of digits each found number "a" has
    }

    return 0;
    }

Что я должен получить, это: 1 для каждого числа от 1 до 9, затем 2 для каждого числа от 10 до 99 и так далее. Сейчас я получаю 1 2 3 4 5 6 7 8 9 11 13 15 17 19 и т. Д. (С указанием только неравных чисел, идущих дальше). Я был бы очень признателен за любую помощь.

1 Ответ

1 голос
/ 03 ноября 2019

Вы не сбрасываете значение digits. Вы должны добавить строку digits = 0 в начале каждой итерации.

int main()
{
    int a; //initially found number
    int digits=0; //number of digits number "a" has
    int temp; // temporary number "a"

    for(a=1;a<=40;a++) // takes a number, starting from 1
    {
        digits=0;
        temp=a;

        while(temp!=0) //finds number of digits the number "a" has
        {
            temp=temp/10;
            digits++;
        }
        cout<<digits<<endl; //prints number of digits each found number "a" has
    }

    return 0;
}
...