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

Умножение двух чисел в столбик - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 37, средняя оценка - 4.65
PlayaRC
4 / 4 / 0
Регистрация: 10.03.2012
Сообщений: 121
03.04.2013, 23:28     Умножение двух чисел в столбик #1
Добрый день, товарищи! Вроде бы задание простое, но я в тупике, просто не пойму как начать.

Нужно умножить два числа, не используя векторы.
Вот начал:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include "stdafx.h"
#include <iostream>
 
using namespace std;
 
void main()
{
    int len_a = 3;
    int len_b = 2;
 
    int a[5] = {4, 2, 7};
    int b[4] = {3, 6};
    int *c = new int[256];
}
Добавлено через 23 секунды
что дальше не пойму
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
ninja2
 Аватар для ninja2
230 / 186 / 7
Регистрация: 26.09.2012
Сообщений: 2,018
Завершенные тесты: 1
03.04.2013, 23:40     Умножение двух чисел в столбик #2
Запиши два числа порозрядно в массивы.
Затем определи число которое больше это будет число которое ты как бы запишешь в верху первое число.
От второго числа возьми последний разряд и умножай на разряды первого числа, проверку делай если число будет больше или равно десяти, то к следующему числу мы должны добавить единицу. И так для каждого разряда.
Получившиеся числа просто суммируй это и есть результат.
Словами ты фиг чо поймешь, а писать мне код лень.
PlayaRC
4 / 4 / 0
Регистрация: 10.03.2012
Сообщений: 121
04.04.2013, 02:59  [ТС]     Умножение двух чисел в столбик #3
Цитата Сообщение от ninja2 Посмотреть сообщение
Словами ты фиг чо поймешь, а писать мне код лень.
а как сделать смещение? вот как на этой картинке, 2ку сносим, остальное плюсуем?

Название: multi-column7.jpg
Просмотров: 1439

Размер: 34.2 Кб
PlayaRC
4 / 4 / 0
Регистрация: 10.03.2012
Сообщений: 121
04.04.2013, 13:04  [ТС]     Умножение двух чисел в столбик #4
подскажите хотя бы идею, как это реализовать
ninja2
 Аватар для ninja2
230 / 186 / 7
Регистрация: 26.09.2012
Сообщений: 2,018
Завершенные тесты: 1
04.04.2013, 14:41     Умножение двух чисел в столбик #5
Я недавно делал это вручную перемножал когда класс создавал для громадных int там умножение вручную есть в функции перегрузка operetor*(); Примеров как именно перемножать я нигде не видел.
отут в функции operator*() в классе я перемножал в столбик. http://www.kselax.ru/2013/03/klass-lint/ но ты фиг там поймешь, а объяснять либо самому тебе перемножить мне лень. Проще тебе самому пару раз умножить и написать по алгоритму программу.

Добавлено через 8 минут
Вообще пару раз умнож число вручную и уже пиши по алгоритму это будет лучший вариан.
Что тебе нужно для начала? Правильно определить какое число больше.
Потом что еще? Да нужно взять последнюю цифру меньшего числа. Ну делай бери ее выдели как небуть с массива.
Потом что? Перемножать разряды с проверкой. ты взял перемножи у тебя получилось число. проверь его больше оно или равно десяти. Если число больше или равно десяти, то раздели его на десять ты получишь число которое нужно будет прибавить при следующем умножении, либо если умножения не будет дописать к множителю в первые разряды добавить так сказать, и взять конечно остаток от деления чтобы снести сам разряд вниз.
Просто так фиг ты что разберешь.
Мой совет вручную перемно а затем уже выдели алгоритм и по нему пиши. exit(1); используй для пошаговой проверки что ты получаешь, на каждом шаге выполнения программы.

Добавлено через 26 минут
Я начало тебе уже сделал. Отак должно быть сначала. Ты просто перемножь и суму сложи с проверкой условия.
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
#include <iostream>
using std::cout;
using std::endl;
#include <cstdlib>
using std::exit;
 
int main()
{
    int chislo1[20]={0};
    int chislo2[20]={0};
    int a=340;
    int b=25;
    int r1;//razr9d pervui
    int r2;//razr9d vtoroi
    //zapicuvaem pervoe chiclo
    for(int i=0;a!=0;i++)
    {
        int d=a%10;
        a/=10;
        chislo1[i]=d;
    }
    //zapicuvaem vtoroe chiclo vo vtoroi massiv
    for(int i=0;b!=0;i++)
    {
        int d=b%10;
        b/=10;
        chislo2[i]=d;
    }
    //exit(1);
    int i=19;
    for(;chislo1[i]==0;i--);
    //cout <<i<<endl;
    //exit(1);
    r1=i;
    //vuvodim polychivcheec9 chislo
    for(;i>=0;i--)
        cout <<chislo1[i]<<' ';
    cout <<endl;
    //vuvod vtorogo chicla
    i=19;
    for(;chislo2[i]==0;i--);
    r2=i;
    for(;i>=0;i--)
        cout <<chislo2[i]<<' ';
    cout <<endl;
    
    
    //peremnojaem
    for(i=0;i<=r2;i++)
    {
        cout <<"peremnojaem"<<endl;
        for(int j=0;j<=r1;j++)
        {
            cout <<chislo1[j]<<"*"<<chislo2[i]<<endl;;
            //cout <<chislo2[i];
        }
    }
}
Просто там отлаживать дофига нужно. exit(1); дофига использовать нада.

Добавлено через 32 секунды
будем считать, что число a всегда больше числа b;

Добавлено через 9 минут
Та пытался полностью сделать там головняк вспомнил там тебе еще нужно и сложение делать. Сначала напиши функцию которая будет складывать два массива, и возвращать третий, а затем уже умножай. Но это трудная задача. Если ты не сильно шаришь, то даже не пытайся делать виг чо сделаешь.
taras atavin
Ушёл с форума.
 Аватар для taras atavin
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
04.04.2013, 18:27     Умножение двух чисел в столбик #6
Цитата Сообщение от PlayaRC Посмотреть сообщение
int *c = new int[256];
во-первых максимальная длина c равна произведению длин множителей.
PlayaRC
4 / 4 / 0
Регистрация: 10.03.2012
Сообщений: 121
17.04.2013, 17:16  [ТС]     Умножение двух чисел в столбик #7
взял в пример картинку из поста 3 и написал следующий код:

Кликните здесь для просмотра всего текста
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
#include "stdafx.h"
#include <iostream>
using namespace std;
 
void main()
{
    int len_a = 3, len_b = 2;
    int a[3] = {4,2,7};
    int b[2] = {3,6};
    int *temp = new int; 
    int *c = new int [len_a + len_b];
 
    for(int i=0; i<10; i++)
        temp[i]=0;
    int k=0;
    for(int i=len_b-1; i>=0; i--)
    {
        for(int j=len_a-1; j>=0; j--)
        {
            temp[k]+=(b[i]*a[j])%10;
            if((b[i]*a[j])>9)
                temp[k+1]=(b[i]*a[j])/10;
            k++;
        }
        k++;
    }
 
 
 
    for(int i=7; i>=0; i--)
        cout<<temp[i]<<" ";
    cout<<endl;
    system("pause");
}


в итоге в одном массиве у меня получается 12812562. Вопрос, как сделать чтобы они складывались сразу, ведь если второе число будет трехзначное, то и чисел будет три
ninja2
 Аватар для ninja2
230 / 186 / 7
Регистрация: 26.09.2012
Сообщений: 2,018
Завершенные тесты: 1
17.04.2013, 19:21     Умножение двух чисел в столбик #8
Создай функцию которая будет складывать два массива. От например summ(int mass1[],int mass2[]); массив по ссылке передается вызови ее отак summ(result[],temp1[]); Все у тебя в result[] должно остаться значение массива temp1, токо result[] сначала нулевой. Это при первом проходе туда запишется значение которое получится при умножении на первый разряд множетеля, при втором проходе уже к значению первого числа прибавиться значение числа которое получилось при умножении второго разряда множителя и.т.д. Я ж уже тебе писал.

Добавлено через 2 минуты
Вручную прибав два числа и функцию напиши по алгоритму. Раз уже разобрался как умножать, то прибавить два числа легче.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
22.04.2013, 10:51     Умножение двух чисел в столбик
Еще ссылки по теме:

C++ Нужно найти произведение двух чисел A и B, не используя умножение. (Цикл)
Строки char: умножение двух чисел C++
C++ Написать программу умножения двух целых чисел "в столбик"

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

Или воспользуйтесь поиском по форуму:
silent_1991
Эксперт C++
4938 / 3014 / 149
Регистрация: 11.11.2009
Сообщений: 7,024
Завершенные тесты: 1
22.04.2013, 10:51     Умножение двух чисел в столбик #9
Цитата Сообщение от taras atavin Посмотреть сообщение
во-первых максимальная длина c равна произведению длин множителей.
Во-первых, сумме, а не произведению. "Во-вторых" ещё не придумал.
Yandex
Объявления
22.04.2013, 10:51     Умножение двух чисел в столбик
Ответ Создать тему
Опции темы

Текущее время: 13:45. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru