У меня есть проблема, когда алгоритм подсчитывает сумму цифр, которые использовались в цикле.
Позвольте мне изложить основные принципы:
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++;
}
и продолжайте цикл с петлей, но я обнаружил, что запутался во втором цикле. После этого я подумал о цикле, который бы использовал много, если бы это был очень неправильный способ решения проблемы.
Надеюсь, проблема понятна.
спасибо
Возможно, это окажется полезным (отделяя счетчик цифр от его собственной функции), помогая вам написать свою программу.
/* 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;
}
digCount = 0; for (int i = 1; i < n; i++) { int numDig = i; /*you while loop here*/ }
stringstream