LINUX.ORG.RU

Д/з по С++


1

3

Вот, собсно, само задание:

Дано натуральное число а (a≤100). Напишите программу, определяющую количество цифр в этом числе, сумму его цифр, выводящую на экран первую и последнюю цифру через два пробела.
Что-то ничего в голову не лезет, помогите пожалуйста

★★★★★

Ъ-быдлокод, C++

#include <iostream>

template <int n>
struct Solution
{
  static const int count = Solution<n / 10>::count + 1;
  static const int sum = Solution<n / 10>::sum + n % 10;
  static const int last = n % 10;
  static const int first = Solution<n / 10>::first;
};

#define DECLARE_ONE_DIGIT_SOLUTION(n) template <>\
                                      struct Solution<n>\
                                      {\
                                        static const int count = 1;\
                                        static const int sum = n;\
                                        static const int last = n;\
                                        static const int first = n;\
                                      };

DECLARE_ONE_DIGIT_SOLUTION(0)
DECLARE_ONE_DIGIT_SOLUTION(1)
DECLARE_ONE_DIGIT_SOLUTION(2)
DECLARE_ONE_DIGIT_SOLUTION(3)
DECLARE_ONE_DIGIT_SOLUTION(4)
DECLARE_ONE_DIGIT_SOLUTION(5)
DECLARE_ONE_DIGIT_SOLUTION(6)
DECLARE_ONE_DIGIT_SOLUTION(7)
DECLARE_ONE_DIGIT_SOLUTION(8)
DECLARE_ONE_DIGIT_SOLUTION(9)

int main()
{
  const int number = 1024; // <-- то самое число a

  std::cout << "Number of digits: " << Solution<number>::count << std::endl;
  std::cout << "Sum: " << Solution<number>::sum << std::endl;
  std::cout << "Last digit: " << Solution<number>::last << std::endl;
  std::cout << "First digit: " << Solution<number>::first << std::endl;

  return 0;
}
Raving_Zealot ★★
()
Ответ на: Ъ-быдлокод, C++ от Raving_Zealot

>Ъ-быдлокод, C++

Круто, блин.

fixman, бери и бегом сдавать.

anonymous
()
Ответ на: Ъ-быдлокод, C++ от Raving_Zealot

Это не Ъ! Где перегрузка операторов, почему не использовано наследование??? Нету! Как вам не стыдно такие программы на лоре публиковать ?!

anonymous
()
Ответ на: Ъ-быдлокод, C++ от Raving_Zealot

Надо доработать! Истинный Ъ-быдлокод типа такого:

template <int n>
struct Solution_Count
{
  static const int count = Solution_Count<n / 10>::count + 1;
};

template <int n>
struct Solution_SumCount : public Solution_Count<n>
{
  static const int sum = Solution_SumCount<n / 10>::sum + n % 10;
};

и т.д.

anonymous
()
Ответ на: комментарий от ados

Александреску, «Современное проектирование на C++».

anonymous
()
Ответ на: Ъ-быдлокод, C++ от Raving_Zealot

Спасибо! Так мне настроение давно никто не поднимал :)

По сабжу, регулярные выражения так и просятся в эту задачу:

void main()
{
 char pattern[] = "\\d";
 char a[256];
 pcre *re;
 scanf("%s",a);
 int options = 0;
 const char *error;
 int erroffset;
 re  =  pcre_compile ((char *) pattern, options, &error, &erroffset, NULL);
  if (!re){
    cout << "Failed\n";
  }
  else{
    int count = 0;
    int ovector[30];
    count  =  pcre_exec  (re,  NULL, (char *) a, strlen(a), 0, 0, ovector, 30);
    count << "Количество цифр: " << count << " последняя цифра:  " << a[ovector[2]] << " первая цифра " << (count == 2 ? a[ovector[4]] : a[ovector[2]];
    // а сумму цифр остается домашним заданием
  }
}


Ъ
amomymous ★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.