У меня проблема с тем, чтобы алгоритм подсчитал сумму цифр, которые были использованы в цикле.
Позвольте мне изложить основные принципы:
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, что будет очень неправильным способом решения проблемы.
Надеюсь проблема понятна.
Спасибо
Возможно, это окажется полезным (разделение подсчета цифр на его собственную функцию), чтобы помочь вам написать свою программу.
/* 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;
}
Вы можете попробовать использовать snprintf
(который возвращает количество символов, которые были написаны). Было бы что-то вроде:
//read numdig
char buff[6]; // max of 5 digits and the '\0'
digCount += snprintf(buff,6, "%d", numdig);
Это может быть другой подход
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;
}