Вводится целое число. Подсчитайте программно сколько раз в его десятичную запись входит некоторая цифра, скажем 3. Вот и всё условие. Например: 123 -> 1; 54321345 -> 2; 3333 -> 4 и т.д.
Задача очень простая … на уровне средней школы. Но для того, чтобы задачу сделать не совсем уж тривиальной – усложним:
– предложите несколько (как можно больше) разных способов реализации;
– для каждой реализации сократите запись кода так, чтобы он был, как можно более кратким.
Решения (из-за простоты задачи есть где развернуться, решений может быть очень много, дополняйте своими):
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | #include <iostream> using namespace std; int main() { setlocale(LC_ALL, "rus"); unsigned long e; unsigned n = 0; cout << "Ввод числа: "; cin >> e; do if (3 == e % 10) n++; while ((e /= 10) > 0); cout << "Цифр 3 в числе " << n << " штук" << endl; } |
Здесь всё решение укладывается в один оператор do … while. Но, обратим внимание на то, что “вводится целое число” – это ввод всегда строки, представляющей число (здесь подвох в формулировке задачи). Тогда:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | #include <iostream> using namespace std; int main() { setlocale(LC_ALL, "rus"); char e[80], *p = e; unsigned n = 0; cout << "Ввод числа: "; cin >> e; while ((p = strchr(p, '3')) != NULL) p++, n++; cout << "Цифр 3 в числе " << n << " штук" << endl; } |
Или так:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | #include <iostream> //#include <string> using namespace std; int main() { setlocale(LC_ALL, "rus"); 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; } |
Или даже так:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | #include <iostream> #include <string> using namespace std; int main() { setlocale(LC_ALL, "rus"); 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; } |
И вот как это выглядит:
1 2 3 4 5 6 7 8 9 10 11 12 | $ ./mul3_1 Ввод числа: 1234531 Цифр 3 в числе 2 штук $ ./mul3_2 Ввод числа: 12341231 Цифр 3 в числе 2 штук $ ./mul3_3 Ввод числа: 12341231 Цифр 3 в числе 2 штук $ ./mul3_4 Ввод числа: 333 Цифр 3 в числе 3 штук |
P.S. Эта задача является хорошей иллюстрацией того основополагающего принципа программирования, что любая поставленная задача может быть решена многими и очень разными способами.
я решил вот так
Пожалуйста, кто-нибудь может человеческим языком объяснить, зачем в решении использовать “unsigned”? Я искал информацию в гугле, но мой мозг оказался не готов к наплыву слишком страшных слов.
потому что возможно тестирующая система набирает много цифр. Поэтому для таких цифр длиною как 10 стпенью 16 или больше используется ключевое слово ‘unsigned’.
#include
using namespace std;
int main() {
unsigned long long int a, c;
int k=0;
cin>>a;
while(a>0) {
c=a%10;
a/=10;
if(c==3) k++;
}
cout<<k;
return 0;
}
1016
alert(‘js’);
#include
#include
using namespace std;
int main()
{
string file;
getline(cin, file);
int sum = 0;
for (int z = 0; z < file.size(); z++)
{
if (file[z] == '3')
{
sum++;
}
}
cout << sum;
return 0;
}
Решение с проверками на ошибки:
#include
#include
using namespace std;
int main()
{
string aboba = “”;
char bebra = 0;
int jopa = 0;
cout << "Input nubmer: ";
getline(cin, aboba);
cin.clear();
for (int i = 0; i < aboba.size(); i++)
{
if (!(isdigit(aboba[i])))
{
cout << "Error: You did not enter a number, or there were other characters in the number." << endl;
return 1;
}
}
cout <> bebra;
if (!(isdigit(bebra)))
{
cout << "Error: You did not enter a number, or there were other characters in the number." << endl;
return 1;
}
for (int i = 0; i < aboba.size(); i++)
{
if (aboba[i] == bebra)
{
jopa++;
}
}
cout << "Numbers found: " << jopa << endl;
return 0;
}