Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <deque>
- #include "catch.hpp"
- using namespace std;
- long M;
- int sum(unsigned long N) {
- deque<int> folder; //объявляем дек
- if (N<=0) {
- return 0; //выход
- }
- folder.push_back(N%10); // Добавляем первую цифру числа N в дек
- N/=10; // делим на 10
- while (N!=0){ //работаем с числом в цикле
- for (int i=0; i<folder.size(); i++){
- if (folder.at(i) == N%10) //проверяем на отсутствие совпадающих цифр
- i+=folder.size();
- if (i == folder.size() -1)
- folder.push_back(N%10);
- }
- N/=10; //переходим к следующему разряду
- }
- return folder.size(); //возвращаем размер дека
- }
- int main() {
- cin >> M; //ввод числа с клавиатуры
- if (M>0) {
- cout << "sum:" << sum(M); //работаем с натуральным числом
- }
- else cout << "Error: input must be > 0"; //число не натуральное – выводим ошибку
- }
- double timeTest(unsigned long n) {
- high_resolution_clock::time_point startTime = high_resolution_clock::now();
- sum(n);
- high_resolution_clock::time_point finishTime = high_resolution_clock::now();
- duration<double> elapsedTime = duration_cast<duration<double>>(finishTime - startTime);
- return elapsedTime.count();
- }
- TEST_CASE( "sum", "[sum]" ) {
- REQUIRE( sum(12340054) == 6 );
- REQUIRE( sum(302) == 3 );
- REQUIRE( sum(121221) == 2 );
- REQUIRE( sum(88005553535) == 4 );
- REQUIRE( sum(0894953787) == 6 );
- REQUIRE( sum(101001) == 2 );
- }
- TEST_CASE( "time", "[time]" ) {
- unsigned long n = 1234567890987654321;
- REQUIRE(timeTest(n) <= 10.0);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement