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

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

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

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++;
}

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

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

0

Решение

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

/* 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;
}
3

Другие решения

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

//read numdig
char buff[6]; // max of 5 digits and the '\0'
digCount += snprintf(buff,6, "%d", numdig);
3

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

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;
}
1
По вопросам рекламы ammmcru@yandex.ru
Adblock
detector