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

Проверка делимости 1,11,111,.,11.1 на их позиции - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Visual studio 2013 не запускает откомпилированный .exe файл http://www.cyberforum.ru/cpp-beginners/thread1496379.html
Начал изучать с++. По началу все работало нормально, но сейчас столкнулся с проблемой - "Локальный отладчик Windows" отказывается запускать любю программу. Выдает ошибку : Не удвется запустить...
C++ Можно ли выделять память под объект класса с помощью функций calloc, malloc или realloc? Интересует данный вопрос. Можно ли и имеет ли вобще смысл например выделять память под объект класса с помощью функций calloc, malloc или realloc ? http://www.cyberforum.ru/cpp-beginners/thread1496356.html
C++ Считывание символов до пробела и после
Здравствуйте. Считываю цифры с помощью функции gets_s(например 3 11). Подскажите как сделать,чтобы цифы до пробелы приравнялись допустим char z;(цифра 3), а после пробела присвоилась char b;(цифра...
Турист ( найти ошибку ). Вариант задачи о рюкзаке C++
Всем привет, решал задачу, но всё-таки где-то допустил ошибку, подскажите где. Спасибо. Гена собирается на туристический слет учеников своей школы. В своем классе он был назначен ответственным за...
C++ HLA/OpenRTI http://www.cyberforum.ru/cpp-beginners/thread1496330.html
Народ, даже не знаю, туда ли пишу. Может кто работал с сабжем? Отзовитесь! Заранее спасибо.
C++ Нерекурсивная быстрая сортировка со стеком Вообщем написал программу, сортирует если не больше 42 элементов(( Объясните пожалуйста почему так. #include "stdafx.h" #include "iostream" #include <stack> using namespace std; void... подробнее

Показать сообщение отдельно
Shamil1
Модератор
1575 / 975 / 180
Регистрация: 26.03.2015
Сообщений: 3,610
10.07.2015, 00:57
Вот сложение:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
void AddBy(List<uint> a, uint b)
{
    const ulong mask = ((ulong)1 << 32) - 1;
 
    ulong carry = b;
    int i = 0;
    while(carry > 0 && i < a.Count)
    {
        ulong n = carry + a[i];
        a[i++] = (uint)(n & mask);
        carry = n >> 32;
    }
    if(carry > 0)
        a.Add( (uint) carry );
}
Правда, я его не запускал, так что возможна какая-то глупая ошибка.
ulong n - двузначное число (в си это long long unsigned)
mask - 32 единицы - битовая маска младшей цифры в этом числе
a - это массив цифр, начиная с младшего разряда
carry - перенос

126 + 8
carry = 8
6 + 8 = 14, a[0] = 4, carry = 1
2 + 1 = 3, a[1] = 3, carry = 0, выход из цикла

Добавлено через 3 минуты
Умножение почти так же:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
void MultiplyBy(List<uint> a, uint b)
{
    const ulong mask = ((ulong)1 << 32) - 1;
 
    ulong carry = 0;
    int i = 0;
    while(i < a.Count)
    {
        ulong n = a[i] * b + carry;
        a[i++] = (uint)(n & mask);
        carry = n >> 32;
    }
    if(carry > 0)
        a.Add( (uint) carry );
}
Добавлено через 12 минут
Вот деление, но у меня где-то ошибка, потому-что ответ не сходится:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
// не делит, только вычисляет остаток
uint DivideReminder(List<uint> a, uint b)
{
    const ulong mask = ((ulong)1 << 32) - 1;
 
    ulong carry = 0;
    int i = a.Count - 1;
    while(i >= 0)
    {
        ulong n = (carry << 32) + a[i--];
        carry = n % b;
    }
    return (uint)(carry & mask);
}
0
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru