Подсчет цифр числа за определенный интервал - PullRequest
0 голосов
/ 29 октября 2019

Мне нужно создать программу на c ++, которая вычисляет, имеет ли число в интервале [m=1000;n=1100] четное число цифр.

Но используя эту программу, которую я написал, я получаю бесконечный цикл.

int digits(int m, int n)
{
    int i, count_digits = 0;

    for(i = m; i < n; i++)
    {
        while(i != 0)
        {
            i = i/10;
            count_digits++;
        }
    }
    if(k%2 == 0) return count_digits;
}

Ответы [ 3 ]

1 голос
/ 29 октября 2019

Внутри цикла

for(i = m; i < n; i++)
{
    while(i != 0)
    {
        i = i/10;
        count_digits++;
    }
}

вы изменяете переменную i.

Введите еще одну локальную переменную

for(i = m; i < n; i++)
{
    int value = i;
    while(value != 0)
    {
        value /= 10;
        count_digits++;
    }
}

Кажется, вам также необходимо повторно инициализироватьпеременная count_digits в каждой итерации цикла.

for(i = m; i < n; i++)
{
    int value = i;
    count_digits = 0;
    while(value != 0)
    {
        value /= 10;
        count_digits++;
    }
}

Обратите внимание, что ваш цикл выполняется в диапазоне значений [m, n-1] вместо диапазона [m, n] какВы написали в своем вопросе.

Также неясно, где объявлена ​​переменная k, используемая в этом выражении

if(k%2 == 0) return count_digits;

.

Я могу догадаться, что вам нужно что-то вродеследующее

#include <iostream>

int main() 
{
    const int M = 1000;
    const int N = 1100;
    const int Base = 10;

    for ( int i = M; i <= N; i++ )
    {
        int value = i;
        size_t count_digits = 0;

        do 
        { 
            if ( value % Base != 0 ) ++count_digits; 

        } while ( value /= Base );

        if ( count_digits % 2 == 0 ) std::cout << i << ' ';
    }

    std::cout << '\n';

    return 0;
}

Вывод программы:

1001 1002 1003 1004 1005 1006 1007 1008 1009 1010 1020 1030 1040 1050 1060 1070 1080 1090 1100

В любом случае вы можете рассматривать программу как основу для вашей программы.

0 голосов
/ 31 октября 2019

Итак, программа работает, но мне пришлось изменить ее для другой программы. Теперь мне нужна функция для возврата чисел, которые имеют 4 цифры, чтобы я мог использовать их для дальнейших функций, чтобы вычислить что-то еще. Я использовал массив «A []» для сбора чисел, которые имеют 4 цифры, но когда я использую массив, чтобы показать вывод, я ничего не получаю.

void digits(int m, int n, int A[]);
int sum(int m, int n);
int main ()
{
    int n, m, i, A[1000];

    ofstream rf("answer.txt");

    digits(m, n, A);

    for(i = m; i <= n; i++) rf << A[i] << " ";

    return 0;
}
void digits(int m, int n, int A[])
{
    ifstream df("data.txt");
    df >> m >> n;

    int i, value, count_digits;

    for(i = m; i <= n; i++)
    {
        count_digits = 0;
        value = i;
        while(value != 0)
        {
            value = value / 10;
            count_digits++;
        }
    if(count_digits % 2 == 0) i = A[i];
    }
}
0 голосов
/ 30 октября 2019

Извините, я сделал несколько ошибок. Переменная k должна была быть count_digits, потому что я редактировал программу перед загрузкой здесь, потому что я не являюсь носителем английского языка, поэтому у меня были переменные, основанные на моем языке. Кроме того, мне нужно, чтобы результат был равен 111, потому что программа должна была подсчитать, сколько чисел в этом интервале имеют четное количество цифр.

...