Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 04.11.2022, 16:31   #1
Gunger
Новичок
Джуниор
 
Регистрация: 04.11.2022
Сообщений: 1
По умолчанию Задача по С++

Пусть дано натуральное число N. Разложите его на цифры и найдите сумму цифр, которые больше 5.
Gunger вне форума Ответить с цитированием
Старый 04.11.2022, 17:23   #2
macomics
Участник клуба
 
Регистрация: 17.04.2022
Сообщений: 1,833
По умолчанию

itoa / strtol -> цикл по символам строки и проверка их на больше чем '5' -> перевод символов в цифры (вычитание кода '0') и суммирование, если больше 5
macomics вне форума Ответить с цитированием
Старый 05.11.2022, 01:07   #3
Пётр Седов
Форумчанин
 
Регистрация: 26.10.2022
Сообщений: 119
По умолчанию

macomics, функция itoa нестандартная, лучше использовать функцию sprintf. Функция strtol зачем? Она parse-ит строку в число.
Пётр Седов вне форума Ответить с цитированием
Старый 05.11.2022, 05:01   #4
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,291
По умолчанию

А чем плохи / и % над самим числом в цикле?
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA вне форума Ответить с цитированием
Старый 05.11.2022, 10:52   #5
macomics
Участник клуба
 
Регистрация: 17.04.2022
Сообщений: 1,833
По умолчанию

Пётр Седов, и что вам не нравится. Одна функция выполняет одно преобразование / другая обратное.

А если не нравится, тогда пишите свой вариант и помогайте. Мы тут не стандарты С/С++ соблюдаем, а лабораторные работы и задачки двоечникам решаем.
macomics вне форума Ответить с цитированием
Старый 05.11.2022, 20:53   #6
Пётр Седов
Форумчанин
 
Регистрация: 26.10.2022
Сообщений: 119
По умолчанию

Цитата:
Сообщение от BDA Посмотреть сообщение
А чем плохи / и % над самим числом в цикле?
Да ничем не плохи. Тут для решения задачи надо получить текстовое представление числа (все цифры). Можно это сделать с помощью стандартной функции sprintf (или нестандартной функции itoa). Можно самому в цикле вычислять цифры с помощью % и /.

Цитата:
Сообщение от macomics Посмотреть сообщение
А если не нравится, тогда пишите свой вариант и помогайте.
Как скажете .
Код:
#include <assert.h>
#include <stdio.h>
#include <iostream>

using namespace std;

// первый вариант
int sum_big_digits_1(int n) {
  assert(n >= 0);
  char buf[11]; // должно хватить для 32-битного int-а (без минуса, потому что >= 0)
  int len = sprintf(buf, "%i", n);
  int sum = 0;
  for (int i = 0; i < len; i++) {
    int digit = buf[i] - '0';
    if (digit > 5) {
      sum += digit;
    }
  }
  return sum;
}

// второй вариант
int sum_big_digits_2(int n) {
  assert(n >= 0);
  int sum = 0;
  do {
    int digit = n % 10;
    if (digit > 5) {
      sum += digit;
    }
    n /= 10;
  } while (n != 0);
  return sum;
}

int main() {
  // тест для pow(2, 31) - 1
  assert(sum_big_digits_1(2147483647) == 28);
  assert(sum_big_digits_2(2147483647) == 28);

  int n;
  cin >> n;
  if (n >= 0) {
    cout << sum_big_digits_1(n) << endl;
    cout << sum_big_digits_2(n) << endl;
  }
  return 0;
}
Пётр Седов вне форума Ответить с цитированием
Старый 05.11.2022, 21:29   #7
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,709
По умолчанию

Цитата:
Сообщение от Пётр Седов Посмотреть сообщение
Тут для решения задачи надо получить текстовое представление числа (все цифры).
Не нужно

Цитата:
Сообщение от Пётр Седов Посмотреть сообщение
Можно самому в цикле вычислять цифры с помощью % и /.
Есть std:iv, чтоб два раза не делить.

Цитата:
Сообщение от Пётр Седов Посмотреть сообщение
Можно это сделать с помощью стандартной функции sprintf (или нестандартной функции itoa).
Или взять, что-то посовременней и из С++.
p51x вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
задача на зачёт. проблема Задача на нобелевскую премию! Sabotage5 Паскаль, Turbo Pascal, PascalABC.NET 2 18.03.2013 15:18
Задача по подсчёту статистики использования букв. Другая задача - по длинной арифметике Pascal ABC kimberly Паскаль, Turbo Pascal, PascalABC.NET 3 24.12.2012 17:03
Задача на оптимальный расчет маршрута (задача в презентации) в табличном процессоре Excel Toofed Помощь студентам 0 30.11.2011 01:12
Задача минимизации дисбаланса на линии сборки (задача минимакса) LenZab Microsoft Office Excel 13 13.03.2011 22:51