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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
farenelu
0 / 0 / 0
Регистрация: 16.11.2015
Сообщений: 9
#1

Умножение/деление длинных целых чисел из строк - C++

16.11.2015, 20:23. Просмотров 459. Ответов 14
Метки нет (Все метки)

у кого есть код 'умножение и деление целых чисел из строк'? заранее спасибо

Добавлено через 32 минуты
или библиотека и функции
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
16.11.2015, 20:23
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Умножение/деление длинных целых чисел из строк (C++):

Умножение длинных целых 11-ричных чисел в виде строк - C++
Доброго времени суток. Если кому приходилось сталкиваться с умножением двух длинных целых чисел (неважно какая система счисления),...

Сделать сложение, вычитание, умножение и деление длинных чисел - C++
В общем, задача такая, что надо сделать сложение, вычитание, умножение и деление длинных чисел. Сумму сделал, с вычитанием какая-то засада....

Деление длинных чисел - C++
Код который делит очень длинное число на обычное число. Если вводить 121 и 2 выводит неправильный ответ. Какие условия надо поставить...

Умножение длинных чисел - C++
Найти произведение двух длинных чисел(целые числа, десятичная запись которых может содержать до 255 цифр). Нужно решить при помощи функций,...

Умножение длинных чисел - C++
Доброго времени суток дорогие брограммисты. Сейчас занимаюсь с длинной арифметикой по книге, автор которой к сожалению предоставил...

Умножение длинных чисел - C++
не работает процедура умножения длинных чисел. переводил с паскаля по книге Окулова "Программирование в алгоритмах". вроде все верно...

14
zss
Модератор
Эксперт С++
6634 / 6196 / 2051
Регистрация: 18.12.2011
Сообщений: 16,155
Завершенные тесты: 1
16.11.2015, 20:33 #2
См. ссылки внизу страницы
0
farenelu
0 / 0 / 0
Регистрация: 16.11.2015
Сообщений: 9
16.11.2015, 20:36  [ТС] #3
там онли говнокод, уже перелопатил
0
GbaLog-
Любитель чаепитий
3078 / 1417 / 342
Регистрация: 24.08.2014
Сообщений: 5,040
Записей в блоге: 1
Завершенные тесты: 2
16.11.2015, 20:55 #4
farenelu, А с чего вы взяли, что это можно по-другому реализовать? Может это только с костылями и можно написать.
0
Dimension
Dimension
571 / 440 / 135
Регистрация: 08.04.2014
Сообщений: 1,709
Завершенные тесты: 1
16.11.2015, 20:57 #5
Цитата Сообщение от farenelu Посмотреть сообщение
там онли говнокод, уже перелопатил
напишите свой ,в чем проблема?
0
farenelu
0 / 0 / 0
Регистрация: 16.11.2015
Сообщений: 9
17.11.2015, 10:09  [ТС] #6
умножение может пригодится, только говнокод, правте, а то
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
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
// ConsoleApplication4.cpp: от этих умников хyz дождешься
//
 
#include "stdafx.h"
#include "string.h"
#include "vector"
#include "windows.h"
char* mult(char *el,char *el2)
{
    bool minus = 0;
    if (el[0] == '-')
    {
        minus = 1;
        el++;
    }
    if (el2[0] == '-')
    {
        minus=minus ? 0 : 1;
        el2++;
    }
    std::string a;
    for (int i = strlen(el) - 1,d=1; i > -1; i--,d++)
    {
        char *buf = (char *)malloc(sizeof(char)*(strlen(el2)+2));
        buf[0] = 0;
        strcpy(&buf[1], el2);
        int ff = 0;
        for (int j = strlen(&buf[1]); j > 0; j--)
        {
            buf[j] -= '0';//костыль для лучшего понимания
            buf[j] = buf[j]*(el[i] - '0') + ff;
            if (buf[j] > 9)
            {
                ff = buf[j] / 10;
                buf[j] %= 10;
            }
            else ff = 0;
            buf[j] += '0';
        }
        if (ff) buf[0] = ff + '0'; else buf++;
        //2222
        //3333
        bool lol = 0;
        for (int j = a.size()-d, jbuf = strlen(buf) - 1; jbuf > -1; jbuf--,j--)
        {
            if (j < 0 )
            {
                char *kostbll = (char*)malloc((jbuf+2)*sizeof(char));
                for (int kostblli =jbuf ; kostblli >-1; kostblli--)
                {
                    kostbll[kostblli] = buf[kostblli];
                    if (lol)
                    {
                        if (kostbll[kostblli] != '9')
                        {
                            kostbll[kostblli] += 1;
                            lol = 0;
                        }
                        else kostbll[kostblli] = '0';
                    }
                }
                kostbll[jbuf + 1] = 0;
                a = kostbll + a;
                free(kostbll);
                break;
            }
            else
            {//5 +5 
                a[j] = a[j] + buf[jbuf]- 2*'0' +lol;
                if (a[j] > 9)
                {
                    a[j] = a[j] % 10;
                    lol = 1;
                }
                else lol = 0;
                a[j] = a[j] + '0';
            }
        }
 
        if (!ff)buf--;
            free(buf);
    }
    if (minus) a = '-' + a;
 
    char *ret = (char *)malloc(sizeof(char)*(a.size()+1));
    int i = 0;
    for (; i < a.size(); i++)
         ret[i]=a[i];
    ret[i] = 0;
    return ret;
}
 
int _tmain(int argc, _TCHAR* argv[])
{
    char d[] = "213", dd[] ="-23139";
    printf("%s",mult(d,dd));
    system("pause");
    return 0;
}
0
GbaLog-
Любитель чаепитий
3078 / 1417 / 342
Регистрация: 24.08.2014
Сообщений: 5,040
Записей в блоге: 1
Завершенные тесты: 2
17.11.2015, 14:06 #7
farenelu, Вы понимаете, что никто здесь не обязан писать "не говнокод". Это форум и тут вам предоставят рабочую версию программы, а не такую, чтобы и работала и всё было красивенько и аккуратненько. А если вам дают программу рабочую, то вы подумайте головой и переделайте, чтобы был не "говнокод".
0
farenelu
0 / 0 / 0
Регистрация: 16.11.2015
Сообщений: 9
17.11.2015, 15:23  [ТС] #8
в моем разумение "говнокод" это если по 20 таким же темам я нахожу только 1 код, с кучами переменными и сделанные вообще xyz знает через что (слишком много разбираться), если б я нашел хоть одну версию более менее РАБОЧУЮ версию, то даже тему не создавал бы, на код который пишется со 100 строк(с большими костылями, но зато без багов), просто была надежда что у кого то ЕСТЬ красивый код и не нужно его писать (я уже давно не надеюсь что тут напишут программу больше 15 строк или дадут нормальный совет)
0
Тамика
Котовчанин
917 / 461 / 145
Регистрация: 16.02.2010
Сообщений: 3,239
Записей в блоге: 27
17.11.2015, 15:28 #9
farenelu, что значит "целых чисел из строк"? Это ввод числа через строку или просто строка набита хламом, в которой встречаются числа?
0
zer0mail
2393 / 2025 / 201
Регистрация: 03.07.2012
Сообщений: 7,343
Записей в блоге: 1
17.11.2015, 15:49 #10
Цитата Сообщение от farenelu Посмотреть сообщение
я уже давно не надеюсь что тут напишут программу больше 15 строк или дадут нормальный совет)
Это проблемы вашего мышления и восприятия. Программ >15 строк здесь не одна сотня (а нормальных советов еще больше). Вот с первой страницы этого раздела (кстати, страниц в разделе>3000) : Реализовать структуру данных "очередь"
0
farenelu
0 / 0 / 0
Регистрация: 16.11.2015
Сообщений: 9
17.11.2015, 15:56  [ТС] #11
str="123";
str1="321";
вывод str2="39483";
деление
str="123";
str1="14";
вывод str2="8";

Добавлено через 4 минуты
zer0mail, думаю, эта программа с очередями есть у всех и везде...ctrlc ctrlv >_>
0
Dimension
Dimension
571 / 440 / 135
Регистрация: 08.04.2014
Сообщений: 1,709
Завершенные тесты: 1
17.11.2015, 15:58 #12
думаю программирование не для вас
0
farenelu
0 / 0 / 0
Регистрация: 16.11.2015
Сообщений: 9
17.11.2015, 16:04  [ТС] #13
почему?

Добавлено через 2 минуты
хотя согласен, если б не нужно было сшивать обратно, то лучше б пошел на хирурга
0
zer0mail
2393 / 2025 / 201
Регистрация: 03.07.2012
Сообщений: 7,343
Записей в блоге: 1
17.11.2015, 22:20 #14
Цитата Сообщение от farenelu Посмотреть сообщение
то лучше б пошел на хирурга
Только не это. Если хирург будет искать по форумам, как вырезать и вставить, его пациенты быстро окажутся в том мире.
1
farenelu
0 / 0 / 0
Регистрация: 16.11.2015
Сообщений: 9
17.11.2015, 23:46  [ТС] #15
деление
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
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
// ConsoleApplication4.cpp: от этих умников хyz дождешься
// 100 строк - это такая слож
 
#include "stdafx.h"
#include "string.h"
#include "vector"
#include "windows.h"
 
 
char* mult(char *el, char *el2)
{
    bool minus = 0;
    if (el[0] == '-')
    {
        minus = 1;
        el++;
    }
    if (el2[0] == '-')
    {
        minus = minus ? 0 : 1;
        el2++;
    }
    /////////////////
    int breakk = strlen(el) - strlen(el2) + 1;
    std::string a;
 
    for(int i = 0; i < breakk; i++)
    {
        a += '0';
        if (i)
        if (el[i - 1] != '0')
        {
            while (el[i - 1] != '0')
            {
                a[i] = a[i] + 1;
                bool ff = 0;
                for (int j = strlen(el2) - 1; j>-1; j--)
                {
                    el[i + j] -= (el2[j]-'0' + ff);
                    if (el[i + j] < '0') 
                    {
                        el[i + j] += 10;
                        ff = 1;
                    }
                    else ff = 0;
                }
                el[i - 1] -= ff;
            }
        }
        while (1)
        {
            bool lol = 1;
            for (int j = 0; j< strlen(el2); j++)
            {///123 2
                if (el[i + j]<el2[j]) 
                {
                    lol = 0;
                    break;
                }
                if (el[i + j]>el2[j]) break;
            }
 
            if (lol)
            {
            a[i] = a[i] + 1;
                bool ff = 0;
                for (int j = strlen(el2) - 1; j > -1; j--)
                {
                    el[i + j] -= (el2[j]-'0' + ff);
                    if (el[i + j] < '0')
                    {
                        el[i + j] += 10;
                        ff = 1;
                    }
                    else ff = 0;
                }
            }
            else break;
        }
    }
    if (minus) a = '-' + a;
    char *ret = (char *)malloc(sizeof(char)*(a.size() + 1));
    int i = 0;
    for (; i < a.size(); i++)
        ret[i] = a[i];
    ret[i] = 0;
    return ret;
}
 
int _tmain(int argc, _TCHAR* argv[])
{
    char d[] = "1113", dd[] ="12";
    printf("%s",mult(d,dd));
    system("pause");
    return 0;
}
Добавлено через 25 секунд
всем спасибо за помощь
0
17.11.2015, 23:46
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
17.11.2015, 23:46
Привет! Вот еще темы с ответами:

Деление длинных чисел столбиком - C++
Привет. У меня возникла проблема при написании курсовой. Необходимо реализовать деление двух больших чисел(записанных &quot;зеркально&quot;). Хотя я...

Деление длинных чисел нацело - C++
Возникла проблема. Завтра сдавать курсовик (арифметика длинных чисел), а у меня не готово деление, так как не знаю, как сделать. Курсовик...

Быстрое умножение длинных чисел. - C++
В общем вопрос стоит так: где можно найти красивый код на агоритм Карацубы. В часности -...

Умножение двух длинных чисел - C++
Приветствую, помогите исправить процедуру умножения двух длинных чисел: void CALL_TYPE Multiply(unsigned char *u,int N, unsigned char...


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

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.