Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/29: Рейтинг темы: голосов - 29, средняя оценка - 5.00
1 / 1 / 0
Регистрация: 14.09.2009
Сообщений: 9
1

Как посчитать количество повторений каждой из цифр в числе N*N?

14.09.2009, 20:59. Показов 5638. Ответов 17
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
я очень плохо ориентируюсь на С++.Такой вопрос:можно числа переводить в строки?И если нет,то как осуществить решение задачи?Помогите, пожалуйста
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
14.09.2009, 20:59
Ответы с готовыми решениями:

Определить количество повторений каждой из цифр 1,2...9 в числе N^N
Определить количество повторений каждой из цифр 1,2...9 в числе N^N(N в степени N), N от 1 до 1000...

Определить количество повторений каждой из цифр в числе
Определить количество повторений каждой из цифр 0,1,2,...,9 в числе N.

Определить количество повторений каждой из цифр в числе
1)Фишка может двигатся по полю длины N только вперёд.Длина хода фишки не более K. Найти число...

Как посчитать количество цифр в числе?
Для каждого пункта напишите функцию, возвращающую ответ. 0) Дано число, посчитайте количество цифр...

17
depict1
281 / 146 / 4
Регистрация: 11.07.2009
Сообщений: 606
14.09.2009, 21:33 2
Цитата Сообщение от Stryagina Посмотреть сообщение
Такой вопрос:можно числа переводить в строки?
да
0
80 / 80 / 19
Регистрация: 07.05.2009
Сообщений: 316
14.09.2009, 21:35 3
примерно так.
C++
1
2
3
4
5
6
7
char symbol='4';
char c[16];
int val=14457483;
_itoa_s(val,c,10);
std::string s=c;
int count=0;
for(int i=0;i<(int)s.size();i++)if(s[i]==symbol){count++;};
count - кол-ва повторений.
val - число.
symbol - цифра.

зы: инклудать <string>
0
быдлокодер
1724 / 911 / 106
Регистрация: 04.06.2008
Сообщений: 5,679
14.09.2009, 21:38 4
Автор, от тебя много не требуется.
Ну, ты хотя бы вопрос сформулируй правильно, чтобы на твоей просьбе не спотыкались люди и за тебя не додумывали- что за числа, десятичные, шестнадцатиричные, дробные, опять же пояснил бы, что такое N*N...
0
Эксперт JavaЭксперт С++
8384 / 3616 / 419
Регистрация: 03.07.2009
Сообщений: 10,709
14.09.2009, 21:44 5
Вот решение
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
#include <iostream>
int main()
{
    setlocale(LC_ALL, "Russian");
    int N, i;
    std::cout<<"Введите число:\n> ", std::cin>>N;
 
    std::cout<<"Квадрат числа "<<N<<" равен: ";
    N *= N;
    std::cout<<N;
    int mas[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 };
    while(N > 0)
    {
        mas[N%10]++;
        N /= 10;
    }
 
    std::cout<<"\n\nКоличество повторений каждого из символов:\n";
    for(i = 0; i < 10; ++i)
        if(mas[i])
            std::cout<<"Количество повторений цифры "<<i<<" равно "<<mas[i]<<'\n';
 
    std::cout<<std::endl;
    system("pause");
    return 0;
}


Adler, алгоритм не универсальный для типа int, да и не оптимален
0
80 / 80 / 19
Регистрация: 07.05.2009
Сообщений: 316
14.09.2009, 22:03 6
Цитата Сообщение от M128K145 Посмотреть сообщение
алгоритм не универсальный
зато коротко и непонятно.
0
Эксперт JavaЭксперт С++
8384 / 3616 / 419
Регистрация: 03.07.2009
Сообщений: 10,709
14.09.2009, 22:12 7
C++
1
2
3
4
5
6
7
8
int mas[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }; //Создаем массив на 10 элементов
//(сколько и цифр от 0 до 9) и обнуляем его
while(N > 0) // пока наше число больше 0, т.е. дву- и более значное
{
        mas[N%10]++; // элемент массива с индексом равным остатку от деления
        // нашего числа на 10 (т.е. получаем последнюю цифру) увеличиваем на 1
        N /= 10;// уменьшаем наше N в 10 раз(отбрасываем последнюю цифру)
}
Мне кажется все предельно ясно, просто, и максимально линейно. Быстрее - теоретически невозможно!
0
Эксперт С++
7175 / 3234 / 81
Регистрация: 17.06.2009
Сообщений: 14,164
14.09.2009, 22:37 8
2M128K145: Берем например N == 0.
По твоему коду будет что цифр у этого числа нет вообще
1
Эксперт JavaЭксперт С++
8384 / 3616 / 419
Регистрация: 03.07.2009
Сообщений: 10,709
14.09.2009, 22:59 9
C++
1
2
3
4
5
6
7
    while(N > 0)
    {
        mas[N%10]++;
        N /= 10;
    }
    if(!N)
        mas[0] = 1;
Вот так. Люди, берите пример с odip'a - человек не верит словам, а просматривает код. И таки находит ошибки! Спасибо! Вроде исправил)
0
Эксперт С++
7175 / 3234 / 81
Регистрация: 17.06.2009
Сообщений: 14,164
14.09.2009, 23:02 10
Можно так:
C
1
2
3
4
5
for ( ; ; ) {
    mas[N%10]++;
    N/= 10;
    if ( N == 0 ) { break; }
}
0
Эксперт JavaЭксперт С++
8384 / 3616 / 419
Регистрация: 03.07.2009
Сообщений: 10,709
15.09.2009, 08:02 11
Или так
C++
1
2
3
4
5
    do
    {
        mas[N%10]++;
        N /= 10;
    }while(N > 0);
0
1 / 1 / 0
Регистрация: 14.09.2009
Сообщений: 9
15.09.2009, 19:02  [ТС] 12
спасибо за советы!!!!только вот еще вопрос...

Добавлено через 2 минуты
Цитата Сообщение от M128K145 Посмотреть сообщение
C++
1
2
3
4
5
6
7
8
int mas[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }; //Создаем массив на 10 элементов
//(сколько и цифр от 0 до 9) и обнуляем его
while(N > 0) // пока наше число больше 0, т.е. дву- и более значное
{
        mas[N%10]++; // элемент массива с индексом равным остатку от деления
        // нашего числа на 10 (т.е. получаем последнюю цифру) увеличиваем на 1
        N /= 10;// уменьшаем наше N в 10 раз(отбрасываем последнюю цифру)
}
Мне кажется все предельно ясно, просто, и максимально линейно. Быстрее - теоретически невозможно!
а куда результат записывается...в массив?т.е. как вывести результат сколько же повторений?
0
Эксперт JavaЭксперт С++
8384 / 3616 / 419
Регистрация: 03.07.2009
Сообщений: 10,709
15.09.2009, 19:07 13
Stryagina, в массив. Вот вывод
C++
1
2
3
4
std::cout<<"\n\nКоличество повторений каждого из символов:\n";
for(i = 0; i < 10; ++i)
       if(mas[i])
              std::cout<<"Количество повторений цифры "<<i<<" равно "<<mas[i]<<'\n';
только обрати внимание на замечания к этому коду написанные в 8 посте и воспользуйся одним из способов устранения этой ошибки, приведенных в 9 - 11 постах. Что бы не много менять в коде используй код из 11 поста, а так на твое усмотрение любой из способов, они идентичны
0
Эксперт С++
7175 / 3234 / 81
Регистрация: 17.06.2009
Сообщений: 14,164
15.09.2009, 19:07 14
Результат записывается в массив.
Вывести - например в цикле от 0 до 9.
0
1 / 1 / 0
Регистрация: 14.09.2009
Сообщений: 9
15.09.2009, 19:11  [ТС] 15
огромное спасибо!!!!!попробую как-нибудь все это довести до целостной программы....только тут вот другая проблема появилась....с++ вообще не работает((((окошко выходит,а там ничего нет....(((((
0
Эксперт JavaЭксперт С++
8384 / 3616 / 419
Регистрация: 03.07.2009
Сообщений: 10,709
15.09.2009, 19:23 16
вот целостная программа
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
#include <iostream>
int main()
{
        setlocale(LC_ALL, "Russian");
        int N, i;
        std::cout<<"Введите число:\n> ", std::cin>>N;
 
        std::cout<<"Квадрат числа "<<N<<" равен: ";
        N *= N;
        std::cout<<N;
        int mas[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 };
        do
        {
                mas[N%10]++;
                N /= 10;
        }while(N > 0);
 
        std::cout<<"\n\nКоличество повторений каждого из символов:\n";
        for(i = 0; i < 10; ++i)
                if(mas[i])
                        std::cout<<"Количество повторений цифры "<<i<<" равно "<<mas[i]<<'\n';
 
        std::cout<<std::endl;
        system("pause");
        return 0;
}
0
1 / 1 / 0
Регистрация: 14.09.2009
Сообщений: 9
15.09.2009, 20:16  [ТС] 17
спасибо!!!!!вы очень хорошие люди!!!!!

Добавлено через 41 минуту
еще раз большое спасибо!!!!у меня все,слава Богу,заработало)))))))))но как мне еще в этой программе добавить условие,что N<=1000
0
Эксперт JavaЭксперт С++
8384 / 3616 / 419
Регистрация: 03.07.2009
Сообщений: 10,709
15.09.2009, 20:52 18
два варианта:
При N > 1000 повторный ввод
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
#include <iostream>
int main()
{
    setlocale(LC_ALL, "Russian");
    int N, i;
inp:
    std::cout<<"Введите число:\n> ", std::cin>>N;
    if(N > 1000)
    {
        std::cout<<"Число должно быть положительным и меньше тысячи.\n";
        goto inp;
    }
    std::cout<<"Квадрат числа "<<N<<" равен: ";
    N *= N;
    std::cout<<N;
    int mas[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 };
    do
    {
        mas[N%10]++;
        N /= 10;
    }while(N > 0);
 
    std::cout<<"\n\nКоличество повторений каждого из символов:\n";
    for(i = 0; i < 10; ++i)
        if(mas[i])
            std::cout<<"Количество повторений цифры "<<i<<" равно "<<mas[i]<<'\n';
 
    std::cout<<std::endl;
    system("pause");
    return 0;
}

При N > 1000 выход из программы
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
#include <iostream>
int main()
{
    setlocale(LC_ALL, "Russian");
    int N, i;
    std::cout<<"Введите число:\n> ", std::cin>>N;
    if(N > 1000)
    {
        system("pause");
        return 0;
    }
    std::cout<<"Квадрат числа "<<N<<" равен: ";
    N *= N;
    std::cout<<N;
    int mas[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 };
    do
    {
        mas[N%10]++;
        N /= 10;
    }while(N > 0);
 
    std::cout<<"\n\nКоличество повторений каждого из символов:\n";
    for(i = 0; i < 10; ++i)
        if(mas[i])
            std::cout<<"Количество повторений цифры "<<i<<" равно "<<mas[i]<<'\n';
 
    std::cout<<std::endl;
    system("pause");
    return 0;
}
0
15.09.2009, 20:52
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
15.09.2009, 20:52
Помогаю со студенческими работами здесь

Как посчитать количество цифр в числе ?
Как посчитать количество цифр в числе ?

Как посчитать количество цифр в числе
i1:= 3284; i2:=214; i3:= 23473; i4:= 1; Как посчитать количество цифр в числе в i1 - 4 i2 -...

Как посчитать количество цифр в числе после запятой
есть число 3.45678 как посчитать числа после запятой т.е. 5

Как посчитать количество цифр в числе типа Real
Допустим у меня есть два числа типа Real r1:= 32.3456 r2:= 1.63 Как в них посчитать и целую...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
18
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru