Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.67/3: Рейтинг темы: голосов - 3, средняя оценка - 4.67
farenelu
0 / 0 / 0
Регистрация: 16.11.2015
Сообщений: 9
1

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

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

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

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

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

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

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

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

Деление длинных чисел столбиком
Привет. У меня возникла проблема при написании курсовой. Необходимо реализовать...

14
zss
Модератор
Эксперт С++
7259 / 6704 / 4244
Регистрация: 18.12.2011
Сообщений: 17,705
Завершенные тесты: 1
16.11.2015, 20:33 2
См. ссылки внизу страницы
0
farenelu
0 / 0 / 0
Регистрация: 16.11.2015
Сообщений: 9
16.11.2015, 20:36  [ТС] 3
там онли говнокод, уже перелопатил
0
GbaLog-
Любитель чаепитий
3166 / 1472 / 465
Регистрация: 24.08.2014
Сообщений: 5,205
Записей в блоге: 1
Завершенные тесты: 2
16.11.2015, 20:55 4
farenelu, А с чего вы взяли, что это можно по-другому реализовать? Может это только с костылями и можно написать.
0
Dimension
Dimension
573 / 443 / 221
Регистрация: 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-
Любитель чаепитий
3166 / 1472 / 465
Регистрация: 24.08.2014
Сообщений: 5,205
Записей в блоге: 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
Тамика
Котовчанин
919 / 463 / 195
Регистрация: 16.02.2010
Сообщений: 3,267
Записей в блоге: 32
17.11.2015, 15:28 9
farenelu, что значит "целых чисел из строк"? Это ввод числа через строку или просто строка набита хламом, в которой встречаются числа?
0
zer0mail
2452 / 2089 / 216
Регистрация: 03.07.2012
Сообщений: 7,571
Записей в блоге: 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
573 / 443 / 221
Регистрация: 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
2452 / 2089 / 216
Регистрация: 03.07.2012
Сообщений: 7,571
Записей в блоге: 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

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

Умножение длинных чисел
Найти произведение двух длинных чисел(целые числа, десятичная запись которых...

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


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

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

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