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

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

Восстановить пароль Регистрация
Другие темы раздела
C++ Visual studio 2013 не запускает откомпилированный .exe файл http://www.cyberforum.ru/cpp-beginners/thread1496379.html
Начал изучать с++. По началу все работало нормально, но сейчас столкнулся с проблемой - "Локальный отладчик Windows" отказывается запускать любю программу. Выдает ошибку : Не удвется запустить программу (имя файла .exe) Отказано в доступе На сколько я понимаю, это проблема кроется в каких-то настройках компилятора. Но вот где именно? Из проводника файл запускается, а вот из VS нет.
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;(цифра 11)/???
Турист ( найти ошибку ). Вариант задачи о рюкзаке C++
Всем привет, решал задачу, но всё-таки где-то допустил ошибку, подскажите где. Спасибо. Гена собирается на туристический слет учеников своей школы. В своем классе он был назначен ответственным за палатки. У себя дома он нашел 3 палатки: первая из них весит a1 килограмм и вмещает b1 человек, вторая весит a2 килограмм и вмещает b2 человек, третья весит a3 килограмм и вмещает b3 человек. В...
C++ HLA/OpenRTI http://www.cyberforum.ru/cpp-beginners/thread1496330.html
Народ, даже не знаю, туда ли пишу. Может кто работал с сабжем? Отзовитесь! Заранее спасибо.
C++ Нерекурсивная быстрая сортировка со стеком Вообщем написал программу, сортирует если не больше 42 элементов(( Объясните пожалуйста почему так. #include "stdafx.h" #include "iostream" #include <stack> using namespace std; void sort(int a, int n) { int mid, left, right, l, r; подробнее

Показать сообщение отдельно
Shamil1
1162 / 644 / 128
Регистрация: 26.03.2015
Сообщений: 2,442
10.07.2015, 01:37     Проверка делимости 1,11,111,.,11.1 на их позиции
Нашёл ошибку:
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 = (ulong)a[i] * b + carry;
        a[i++] = (uint)(n & mask);
        carry = n >> 32;
    }
    if(carry > 0)
        a.Add( (uint) carry );
}
В строке 9 забыл к ulong привести перед умножением и из-за этого терял первую "цифру" произведения (carry).

Добавлено через 18 минут
Вот полный, отлаженный код.
По сравнению с написанным "вслепую" всего одно изменение - приведение к ulong в функции умножения.
Если закомментировать строку 4 в Main(), то будет выводить остатки.
Можно вместо GetSeq() и IEnumerable обычный цикл использовать: вместо yield return сохранять в массив.
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
void Main()
{
    var res = GetSeq()
        .Select(x => x == 0 ? 0 : 1)
        .Take(50).ToArray();
    Console.WriteLine(string.Join(",", res));
}
 
const ulong mask = ((ulong)1 << 32) - 1;
 
IEnumerable<uint> GetSeq()
{
    List<uint> devidend = new List<uint>{ 0 };
    uint divider = 0;
    
    while(true)
    {
        MultiplyBy(devidend, 10);
        AddBy(devidend, 1);
        divider = divider + 1;
        uint reminder = DivideReminder(devidend, divider);
        yield return reminder;
    }
 
}
 
void AddBy(List<uint> a, uint b)
{
    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 );
}
 
void MultiplyBy(List<uint> a, uint b)
{
    ulong carry = 0;
    int i = 0;
    while(i < a.Count)
    {
        ulong n = (ulong)a[i] * b + carry;
        a[i++] = (uint)(n & mask);
        carry = n >> 32;
    }
    if(carry > 0)
        a.Add( (uint) carry );
}
 
// не делит, только вычисляет остаток
uint DivideReminder(List<uint> a, uint b)
{
    ulong carry = 0;
    int i = a.Count - 1;
    while(i >= 0)
    {
        ulong n = (carry << 32) + a[i--];
        carry = n % b;
    }
    return (uint)(carry & mask);
}
 
Текущее время: 19:16. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru