Форум программистов, компьютерный форум CyberForum.ru

Замкнутые области в шестнадцатеричных числах - C++

Восстановить пароль Регистрация
 
AKruglyak
0 / 0 / 0
Регистрация: 18.02.2012
Сообщений: 24
14.01.2013, 19:17     Замкнутые области в шестнадцатеричных числах #1
Имеется задача.
Рассмотрим последовательность чисел от 10000000 до 4FFFFFFF включительно. Для каждой шестнадцатеричной цифры числа определим количество замкнутых областей в ней. Так, цифры 0 или 9 имеют одну замкнутую область, а цифры 8 или B–две замкнутых области. Посчитаем общее количество замкнутых областей числа. Выбросим из последовательности числа, в которых более 6 замкнутых областей. В полученной последовательности числа занумеруем, начиная с 1.
Найдите остаток от деления на 10001 суммы произведений всех чисел последовательности на номер числа в последовательности.
Реализовал её с помощью нескольких программ. Первая выписывает все числа в шестнадцатеричном виде в данном диапазоне. Вторая отбирает подходящие по условию. Третья считает результат.
1)
C++
1
2
3
4
5
6
7
8
9
#include <fstream>
using namespace std;
fstream cin("8in.txt");
ofstream cout("8out.txt");
int main(){
    for(int i=268435456;i<=1342177279;i++){
        cout<<hex<<i<<' ';
    }
}
2)
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
#include <fstream>
#include <string>
using namespace std;
fstream cin("8out.txt");
ofstream cout("8.1.out.txt");
 
bool check(string m){
    int count=0;
    for(int i=0;i<m.size();i++){
        if(m[i]=='0' or m[i]=='4' or m[i]=='6' 
        or m[i]=='9' or m[i]=='a' or m[i]=='d')
            count++;
        if(m[i]=='8' or m[i]=='b')
            count+=2;
    }
    
    if(count<=6)
        return true;
    else 
        return false;
}
int main(){
    string s;
    long long n=0;
    for(int i=0;i<1073741823;i++){
        cin>>s;
        if(check(s)){
            n++;
            cout<<s<<' ';
            }
    }
    
}
3)
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <fstream>
using namespace std;
fstream cin("8.1.out.txt");
ofstream cout("8.2.out.txt");
int main(){
    long long ans=0;
 
    for(int i=1;i<=1073741823;i++){
        int m;
        cin>>hex>>m;
        ans+=(i*m)%10001;
    }
    cout<<ans%10001;
    
}
Все работает. Но у меня есть несколько весомых сомнений. Во-первых, во второй программе я вставлял счетчик, чтобы он выдал сколько всего таких чисел. Так вот он говорит, что 1073741823, но это число всех чисел в данном диапазоне. Однако, вес файла с итогом первой и второй программы разнится в 9 раз. Во-вторых, не уверен, что правильно реализовал 3 программу. Укажите на мои ошибки, пожалуйста.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
14.01.2013, 19:17     Замкнутые области в шестнадцатеричных числах
Посмотрите здесь:

C++ Сравнение шестнадцатеричных форм
Калькулятор шестнадцатеричных чисел C++
О простых числах! C++
Как создать массив шестнадцатеричных чисел? C++
Таблица двоичных, восьмеричных и шестнадцатеричных эквивалентов десятичных чисел C++
шестнадцатеричных числа. Определить наибольший общий делитель C++
Функция, которая преобразует строку шестнадцатеричных цифр C++
WxString(4 байта) некорректное отображение значения шестнадцатеричных значений C++

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Ответ Создать тему
Опции темы

Текущее время: 04:43. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru