Вводится целое число.
Подсчитайте программно сколько раз в его десятичную запись входит некоторая цифра, скажем 3. Вот и всё условие. Например: 123 -> 1; 54321345 -> 2; 3333 -> 4 и т.д.
Задача очень простая … на уровне средней (сельской ) школы. Но для того, чтобы задачу сделать не совсем уж примитивной – усложним её так:
– предложите несколько (как можно больше) разных способов реализации;
– для каждой реализации сократите запись кода так, чтобы он был, как можно более кратким.
Поехали...
Код: Выделить всё
#include <iostream>
#include <algorithm>
using namespace std;
int main() {
unsigned long long e;
unsigned n = 0;
cout << "Ввод числа: ";
cin >> e;
do if( 3 == e % 10 ) n++;
while( ( e /= 10 ) > 0 );
cout << "Цифр 3 в числе " << n << " штук" << endl;
}
Но, обратим внимание на то, что формулировка “вводится целое число” – это ввод всегда строки, представляющей число (здесь подвох в формулировке задачи). Тогда так:
Код: Выделить всё
#include <iostream>
#include <cstring>
using namespace std;
int main() {
char e[ 80 ], *p = e;
unsigned n = 0;
cout << "Ввод числа: ";
cin >> e;
while( ( p = strchr( p, '3' ) ) != NULL )
p++, n++;
cout << "Цифр 3 в числе " << n << " штук" << endl;
}
Код: Выделить всё
#include <iostream>
#include <cstring>
using namespace std;
int main() {
char e[ 80 ];
unsigned n = 0, i;
cout << "Ввод числа: ";
cin >> e;
for( i = 0; i < strlen( e ); i++ )
if( e[ i ] == '3' ) n++;
cout << "Цифр 3 в числе " << n << " штук" << endl;
}
Код: Выделить всё
#include <iostream>
#include <algorithm>
using namespace std;
int main() {
string e;
unsigned n = 0;
cout << "Ввод числа: ";
cin >> e;
for( string::iterator i = e.begin() ;; n++, i++ )
if( ( i = find( i, e.end(), '3' ) ) == e.end() ) break;
cout << "Цифр 3 в числе " << n << " штук" << endl;
}
P.S. Эта задача является очень хорошей иллюстрацией того основополагающего принципа программирования, что любая поставленная задача может быть решена многими и очень разными способами.