Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Sylar9
134 / 55 / 13
Регистрация: 04.09.2011
Сообщений: 1,952
Записей в блоге: 1
#1

Имеем число, вычислить суму произведений цифр для всех чисел длиной - C++

15.07.2012, 12:17. Просмотров 579. Ответов 8
Метки нет (Все метки)

Не могу как досчитать
Имеем число N(количество цифр), вычислить суму произведений цифр для всех чисел длиной N. N<1000

Пример:

1=45

Если кому-то лень решать подскажите хоть алгоритм
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
15.07.2012, 12:17
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Имеем число, вычислить суму произведений цифр для всех чисел длиной (C++):

Вычислить сумму произведений всех троек соседних чисел массива
Дан одномерный числовой массив A из n элементов. Вычислить сумму произведений...

Дана последовательность n натуральных чисел. Для каждого числа вычислить количество его цифр и сумму этих цифр. Вывести на экран каждое число, количес
Дана последовательность n натуральных чисел. Для каждого числа вычислить...

В заданном числовом массиве вычислить сумму произведений всех троек соседних чисел.
7.9.1. Помогите, пожалуйста, решить задачу в С++. \В заданном числовом...

Написать шаблоны функций для для вычисления суммы произведений двух соседних чисел для трех целых чисел и в одномерном массиве целых чисел
Написать шаблоны функций для для вычисления суммы произведений двух соседних...

Посчитать суму цифр для натурального числа, для квадрата этой суммы, куба и тд
2. для введённого натурального числа n1 посчитать суму его цифр n2, для...

Посчитать сумму произведений всех N-значных чисел
Всем добрый день! Есть задание - требуется вычислить сумму произведений цифр...

8
DU
1486 / 1132 / 164
Регистрация: 05.12.2011
Сообщений: 2,279
15.07.2012, 12:33 #2
разбиваете число на цифры. Перемножаете получившиеся числа. Что тут сложного то?
Длинное число может быть представленно в виде строки. тогда каждый символ строки - это и есть цифра. Пробегаете по циклу и тупо перемножаете каждый символ строки преобразовываете в цифру и перемножаете.
0
Sylar9
134 / 55 / 13
Регистрация: 04.09.2011
Сообщений: 1,952
Записей в блоге: 1
15.07.2012, 12:41  [ТС] #3
Цитата Сообщение от DU Посмотреть сообщение
разбиваете число на цифры. Перемножаете получившиеся числа. Что тут сложного то?
Длинное число может быть представленно в виде строки. тогда каждый символ строки - это и есть цифра. Пробегаете по циклу и тупо перемножаете каждый символ строки преобразовываете в цифру и перемножаете.
тип храниея данных можно использовать string ? и как распознать цыфры ?
0
DU
1486 / 1132 / 164
Регистрация: 05.12.2011
Сообщений: 2,279
15.07.2012, 12:45 #4
можно все, что подходит. std::string для этого подходит.
для проверки того, что символ является цифрой есть спец функция
isdigit (http://www.cplusplus.com/reference/std/locale/isdigit/) ну или руками можете проверить, что символ является одним из набора 0123456789.
0
Sylar9
134 / 55 / 13
Регистрация: 04.09.2011
Сообщений: 1,952
Записей в блоге: 1
15.07.2012, 12:50  [ТС] #5
Цитата Сообщение от DU Посмотреть сообщение
можно все, что подходит. std::string для этого подходит.
для проверки того, что символ является цифрой есть спец функция
isdigit (http://www.cplusplus.com/reference/std/locale/isdigit/) ну или руками можете проверить, что символ является одним из набора 0123456789.
это мне надо содать массив
C++
1
string s[100]
? а потом сложит то что он введет ? Правельно я мыслу
0
DU
1486 / 1132 / 164
Регистрация: 05.12.2011
Сообщений: 2,279
15.07.2012, 13:00 #6
нет. не правильно. вот как-то так надо:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
const std::string str = "1234325235322342665736453443";
result = 1;
for (int i = 0; i < str.length(); ++i)
{
  const char ch = str[i];
  if (isdigit(ch))
  {
     const int number = ch - '0';
     result *= number; // тут нужно нужно помнить о том, что результат умножения может
                              //  превосходить максимальное число, которое могут хранить переменные типа int
  }
}
std::cout << "result = " << result << std::endl;
0
Sylar9
134 / 55 / 13
Регистрация: 04.09.2011
Сообщений: 1,952
Записей в блоге: 1
15.07.2012, 13:23  [ТС] #7
Цитата Сообщение от DU Посмотреть сообщение
нет. не правильно. вот как-то так надо:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
const std::string str = "1234325235322342665736453443";
result = 1;
for (int i = 0; i < str.length(); ++i)
{
  const char ch = str[i];
  if (isdigit(ch))
  {
     const int number = ch - '0';
     result *= number; // тут нужно нужно помнить о том, что результат умножения может
                              //  превосходить максимальное число, которое могут хранить переменные типа int
  }
}
std::cout << "result = " << result << std::endl;
Вот я написал код:
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
#include <iostream>
#include <locale.h>
#include <string>
using namespace std;
int main()
{
    setlocale(LC_ALL,"Rus");
    string N;
    cout << "Введите цифры" << endl;
    cin >> N;
    int result = 1;
    for (int i = 0; i < N.length(); ++i)
    {
        const char ch = N[i];
        if (isdigit(ch))
        {
            const int number = ch - '0';
            result *= number; // тут нужно нужно помнить о том, что результат умножения может превосходить максимальное число, которое могут хранить переменные типа int
        }
    }
cout << "result = " << result << endl;
 
 
 
 
    system("pause");
    return 0;
}
Добавлено через 17 минут
Неверно Переполнения int не должно быть, да и самого int так же

Добавлено через 1 минуту
Цитата Сообщение от DU Посмотреть сообщение
нет. не правильно. вот как-то так надо:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
const std::string str = "1234325235322342665736453443";
result = 1;
for (int i = 0; i < str.length(); ++i)
{
  const char ch = str[i];
  if (isdigit(ch))
  {
     const int number = ch - '0';
     result *= number; // тут нужно нужно помнить о том, что результат умножения может
                              //  превосходить максимальное число, которое могут хранить переменные типа int
  }
}
std::cout << "result = " << result << std::endl;
какой тип переменой для переменой result ?
0
DU
1486 / 1132 / 164
Регистрация: 05.12.2011
Сообщений: 2,279
15.07.2012, 13:27 #8
сейчас int. можно long или long long, но у них тоже есть предел. для очень больших чисел нужно использовать или самому напиать специальные классы для работы с большими целыми числами. но это после того, как выяснится, что результат на самом деле не вмещается в long long.
0
Toshkarik
1149 / 866 / 90
Регистрация: 03.08.2011
Сообщений: 2,404
Завершенные тесты: 1
15.07.2012, 15:26 #9
По условию при N < 1000, получается максимум 999 цифр, если все эти цифры будут девятками, то получается число в 955 знаков. В любом случае нужна длинная арифметика.
0
15.07.2012, 15:26
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
15.07.2012, 15:26
Привет! Вот еще темы с решениями:

Вычислить суму 4 чисел (верхних и нижних) в масиве
помогите пожалуйста написать программу которая показывает суму читерех чисел в...

Натуральное число, в котором n цифр, если сумма цифр возведённая в nую степень равна числу то вы вывесте число на экран(интервал чисел от 1 до k)
Натуральное число, в котором n цифр, если сумма цифр возведённая в nую степень...

Дано двумерный массив целых чисел. Найти сумму произведений всех строк
Дано двумерный массив целых чисел. Найти сумму произведений всех строк. В чем...

Вычислить общую сумму всех четных цифр во всех нечетных элементах
Помогите пожалуйста! Буду очень благодарен!


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

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru