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

Алгоритм перевода чисел - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Позиции http://www.cyberforum.ru/cpp-beginners/thread299270.html
Найти все натуральные числа не превосходящие n десятичная запись которых есть строго возрастающая или строго убывающая последовательность . Скажите мне пожалуйста как разбивать пробую с остатком ну чет не идет к меня .
C++ DrawGrid изменение размеров Доброе время суток! Объясните мне пожалуйста как автоматически изменять высоту и длину (размеры) окна DrawGrid Моя задача состоит в решение матриц (любой размерности(в пределах разумного !>100)), с увеличение количества ячеек длина и высота не меняется должным образом. попробовал мудрить: void __fastcall TForm1::Button1Click(TObject *Sender) { a=StrToInt(Edit1->Text); if... http://www.cyberforum.ru/cpp-beginners/thread299265.html
C++ Заполнить матрицу соответствии образцу
Заполнить матрицу соответствии образце Чистый Си
C++ Сортировка элементов массива по заданному критерию
нужно написать программу работы с одномерным массивом (ввод \ вывод массива, помещение новых элементов в массив, удалениe элементов из массива, сортировка элементов массива по заданному критерию).
C++ Опять текстуры http://www.cyberforum.ru/cpp-beginners/thread299257.html
Я,наверное,всех уже достал с текстурами)Но всё же вот фрагменты кода рисовка цилиндра с текстурой glEnable(GL_TEXTURE_2D); barkn=0; glGenTextures(1, &barkn); glBindTexture(GL_TEXTURE_2D, barkn); glPixelStorei(GL_UNPACK_ALIGNMENT, 1); glTexImage2D(GL_TEXTURE_2D, 0, 3, width, height,
C++ Написать программу для обработки массивов Написать программу для обработки массивов. Все массивы создаются путем динамического выделения памяти. Доступ к их элементов производится с помощью исключительно указателей. размер массива 100. диапазон -100 - 100 задание ... Найти непрерывную положительную последовательность сумма элементов которой максимальна. Чистый Си. P/S. Помогите пожалуйста. Мне очень нужна эта программа... подробнее

Показать сообщение отдельно
diagon
Higher
 Аватар для diagon
1921 / 1187 / 49
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
19.05.2011, 07:52     Алгоритм перевода чисел
Длинка
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
#include <iostream>
#include <sstream>
#include <vector>
#include <algorithm>
#include <conio.h>
struct div_result{
    std::vector<int> div;
    long long mod;
};
void readlong(std::vector<int> &a){
    std::string s;
    std::cin >> s;
    for (std::string::iterator i = s.end()-1; i >= s.begin(); i--)
        a.push_back(*i-48);
}
void writelong(std::vector<int> a){
    for (std::vector<int>::iterator i=a.end()-1; i >= a.begin(); i--)
        switch (*i) {
        case 10:std::cout << 'A';   break;
        case 11:std::cout << 'B';   break;
        case 12:std::cout << 'C';   break;
        case 13:std::cout << 'D';   break;
        case 14:std::cout << 'E';   break;
        case 15:std::cout << 'F';   break;
        default:std::cout << *i;
        }
}
div_result div(std::vector<int> a,long long b){
    div_result q;
    std::vector<int> c;
    bool k=false;
    long long x=0;
    for (int i=a.size()-1;i>=0; i--){
        x=x*10+a[i];
        if (x<b&&!k&&i) continue;
        k=true;
        c.push_back(x/b);
        x%=b;
    }
    std::reverse(c.begin(),c.end());
    q.div.assign(c.begin(),c.end());
    q.mod=x;
    return q;
}
std::vector<int> to16(std::vector<int> a){
    std::vector<int> c; //результат
    for (;;) {
        if (a.size()==1) {c.push_back(*a.begin()); break;}  //если осталась одна цифра заносим число в начало
        if(a.size()==2&&a[1]==1&&a[0]<6) {c.push_back(a[1]*10+a[0]); ; break;}//если 2 цифры, но число меньше 16, то тоже самое
        c.push_back(div(a,16).mod);    //ложим в результат остаток от деления a на 16
        a=div(a,16).div;   //делим а на 16
        if (a.back()==0) a.pop_back();  //если в начале числа получился 0, то убираем его
    }
    return c;
}
int main(){
    std::vector <int> a;
    readlong(a);
    writelong(to16(a));
    getch();
    return 0;
}
На краткость кода не претендую, но алгоритм там простой(тупо деление числа на 16)
 
Текущее время: 00:36. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru