Форум программистов, компьютерный форум, киберфорум
Наши страницы

Подсчитывать количество цифр 2 - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Вычисления с использованием подпрограмм, функции и процедуры http://www.cyberforum.ru/cpp-beginners/thread754326.html
Помогите пожалуйста!)) 1)Дважды вычислить значение выражения, первый раз используя процедуру, а второй - функцию. http://s020.***********/i704/1301/41/57860c703137.jpg
C++ Opengl и С++ для начинающего Приветствую всех! Можете пожалуйста подсказать хорошую книгу или видео урок по opengl и c++ для начинающего. Спасибо за ответы! ;) http://www.cyberforum.ru/cpp-beginners/thread754311.html
Разбить текст на страницы C++
Дан текстовый файл. Преобразовать его, разбив текст на страницы и пронумеровав их, причем номер нечетной страницы должен размещаться в правом нижнем углу, а номер четной страницы - в ее левом нижнем...
Как найти координаты точки на прямой удаленной от заданной точки на х C++
Добрый день! Помогите мне пожалуйста со следующей задачей. Дано 3 точки с координатами A(x1,y1), B(x2,y2), C(x3,y3) Нужно найти координаты точки D(x4,y4), которая лежит на прямой AB и удалена от...
C++ игра змейка http://www.cyberforum.ru/cpp-beginners/thread754288.html
Здравствуйте! Знакомый попросил помощи, объяснить подробно как работает программа и как сделать разные уровни в игре. Но я не особо ее понимаю.. #include <allegro.h> void init(); void...
C++ Из данных точек перебрать все комбинации по 2 треугольника и проверить, принадлежит ли первый треугольник второму В общем пишу курсовую работу. Уже устал биться с ней... Вот задание: дано N точек, из них нужно перебрать все комбинации по 2 треугольника и проверить, принадлежит ли первый треугольник второму.... подробнее

Показать сообщение отдельно
BRcr
4009 / 2298 / 155
Регистрация: 03.02.2011
Сообщений: 5,064
Записей в блоге: 10
07.01.2013, 02:17
Сравнение по количеству потоков... на досуге, может, допинаю сюда метод с предварительно заполненным массивом значений по разрядам, как предложил ValeryS, но тот вообще нисколько времени занимать не будет после заполнения массива, так что смысла особо нет...
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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
using namespace std;
// ---------------------------------------------------------------------------
typedef unsigned __int64 ull; // a long, long unsigned value
// ---------------------------------------------------------------------------
ull straight_count_2( ull n ) {
    ull cnt = 0;
 
    for ( ull i = 0, j; i <= n; ++i ) {
        for ( j = i; j != 0; j /= 10 ) {
            if ( j % 10 == 2 ) {
                ++cnt;
            }
        }
    }
    return cnt;
}
// ---------------------------------------------------------------------------
struct thread_data {
    ull begin, end, result;
};
DWORD WINAPI thread_count( LPVOID lpParam ) {
    thread_data *data = ( thread_data* )lpParam;
    ull cnt = 0, end = data->end;
 
    for ( ull i = data->begin, j; i <= end; ++i ) {
        for ( j = i; j != 0; j /= 10 ) {
            if ( j % 10 == 2 ) {
                ++cnt;
            }
        }
    }
    data->result = cnt;
}
ull do_threaded_count( int _threads_amount, ull _seed ) {
    HANDLE *threads = new HANDLE[_threads_amount];
    thread_data *data = new thread_data[_threads_amount];
    ull result = 0, seed_part = _seed / _threads_amount;
 
    for ( size_t i = 0; i < _threads_amount; ++i ) {
        data[i].begin = seed_part * i + 1;
        data[i].end = seed_part * ( i + 1 );
        threads[i] = CreateThread( NULL, 0, &thread_count, &data[i], 0, NULL );
    }
    WaitForMultipleObjects( _threads_amount, threads, TRUE, INFINITE );
 
    for ( size_t i = 0; i < _threads_amount; result += data[i].result, CloseHandle( threads[i] ), ++i );
    delete[]threads;
    delete[]data;
 
    return result;
}
// ---------------------------------------------------------------------------
int _tmain( int argc, _TCHAR *argv[] ) {
    system( "color 2e" ); 
    system( "chcp 1251" );
    system( "cls" );
    //////////////////////////////////////
    t_time_counter tc;
    ull result, seed = 50000000;
 
    tc.start( );
    result = straight_count_2( seed );
    tc.stop( );
    cout << "straight_count_2() elapsed " << tc.mins << ":" << tc.secs << ":" << tc.msecs <<
                   ",  result = " << result << endl;
 
    for ( size_t i = 2; i <= 20; i += 2 ) {
        tc.start( );
        result = do_threaded_count( i, seed );
        tc.stop( );
        cout << i << " threads count elapsed " << tc.mins << ":" << tc.secs << ":" << tc.msecs <<
                       ",  result = " << result << endl;
    }
 
    //////////////////////////////////////
    cout << "\n\n";
    system( "pause" );
    return 0;
}
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
class t_time_counter {
public:
    DWORD full_time;
    int hours, mins, secs, msecs;
    void __fastcall start( ) {
        full_time = GetTickCount( );
    }
    void __fastcall stop( ) {
        full_time = GetTickCount( ) - full_time;
        hours = ( mins = ( secs = full_time / 1000 ) / 60 ) / 60;
        mins %= 60;
        secs %= 60;
        msecs = full_time % 1000;
    }
};
1
Миниатюры
Подсчитывать количество цифр 2  
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru