Подсчет суммы цифр в цикле

0

У меня есть проблема, когда алгоритм подсчитывает сумму цифр, которые использовались в цикле.

Позвольте мне изложить основные принципы:

1 2 3 4 5 6 7 8 9 = 9 цифр
1 2 3 4 5 6 7 8 9 10 = 11 цифр

Я попытался немного найти решение, но я не смог найти решение, которое было бы подходящим.

Основная идея состоит в том, что у меня есть известное число n, которое будет представлять конец числа цифр. Граф начинается с 1, так что 1 <= n <= 10000.

Первое, что пришло мне в голову, - подсчитать цифру:

while(numdig != 0) {
    numDig = n/10;
    digCount++;
}

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

Надеюсь, проблема понятна.
спасибо

  • 0
    У вас есть сложная часть, повторяйте числа и используйте свой код для подсчета цифр. digCount = 0; for (int i = 1; i < n; i++) { int numDig = i; /*you while loop here*/ }
  • 0
    Интересно, есть ли простое решение с использованием stringstream
Теги:
count
sum
digits

3 ответа

3
Лучший ответ

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

/* return the number of digits in the number i */
int ndigits ( int i ) {
    int n = 1;

    if (i < 0) i = -i;
    while (i >= 10) { ++n; i /= 10; }
    return n;
}
  • 0
    Был бы способ оптимизировать это по сравнению с методом грубой силы, считая количество цифр в каждом из чисел. 0-9 каждый имеет 1, 10-99 каждый имеет 2, 100-999 каждый имеет 3 и т. Д. Итак, если число больше 100, вы знаете, что у вас есть 9 всего на 1-9, плюс 1800 на 100-999 (900 номеров по 2 цифры в каждой) и так далее.
  • 0
    Спасибо, функция может действительно помочь в этом случае
Показать ещё 4 комментария
3

Вы можете попробовать использовать snprintf (который возвращает количество символов, которые были написаны). Было бы что-то вроде:

//read numdig
char buff[6]; // max of 5 digits and the '\0'
digCount += snprintf(buff,6, "%d", numdig);
  • 0
    Спасибо, я нашел это очень полезным :) Я никогда не слышал о snprintf раньше
  • 0
    <cstdio> (<stdio.h>) имеет несколько очень полезных функций для подобных вещей =)
Показать ещё 3 комментария
1

Это может быть другой подход

int getDigitCount ( int val )
{
   stringstream ss;
   ss << val;
   string valstr = ss.str ();
   return valstr.length();
}


int main ( int argc, char** argv )
{
   int n;
   cout << "Enter a number between 1 and 10000 " << endl;
   cin >> n;
   long digitcount = 0;
   for ( int i = 1; i <= n; i ++ )
   {
      digitcount += getDigitCount ( i );
   }

   cout << "Digit Count =" << digitcount << endl;
   return 0;
}

Ещё вопросы

Сообщество Overcoder
Наверх
Меню