Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 12.02.2012, 10:39   #1
fixtera
 
Регистрация: 23.01.2012
Сообщений: 5
По умолчанию Умножить два числа столбиком в C++

Привет
задача - написать программу умножения 2-х чисел от 0 до 999 в столбик. Например умножение чисел 433 и 456 выглядеть примерно так:

456
x 433
---------
1368
1368
1824
---------
197448

Вот. Препод дал кое-какие наводки, но дальше их я никак
вот собственно что есть


#include <iostream>
using namespace std;

Код:
int main()

{
int nomer1;
int nomer2;
int place = 1;
int total;
int digit, step;

cout << "Vvedite 1-e chislo: "; 
cin >> nomer1;
cout << "Vvedite 2-e chislo ";
cin >> nomer2;



digit = nomer2 % 10; 

nomer2 = nomer2/ 10; 

step = nomer1 * digit * place; 



total += step; 

place = place * 10; 

cout << total; 

system("pause");


}
Ногами не бейте, но это все что есть

Последний раз редактировалось ACE Valery; 15.02.2012 в 14:40.
fixtera вне форума Ответить с цитированием
Старый 12.02.2012, 14:47   #2
Sna1L
Форумчанин
 
Аватар для Sna1L
 
Регистрация: 15.03.2011
Сообщений: 272
По умолчанию

могу предположить, что далее вам дадут задание на длинную арифметику(числа, для которых не достаточно стандартных типов).
Так что лучше использовать массивы. Для начала, для чисел от 0-9 для каждого разряда, а потом(для экономии памяти) хранить уже до 999.

Логика такова:
чем больше смещение элемента(индекс) тем больше его разряд.
Т.е. представим число 123:
ar[0] = 3;
ar[1] = 2;
ar[2] = 1;

Соответственно, каждый i-ый элемент массива равен: ar[i] * ( 10^i ) (10 в i-ой степени).
Сложение выполняется просто:
начиная с нулевого складываем поразрядно. если результат больше 10, то вычитаем 10 и переносим в следующий разряд.
допустим:
a[0] = 0; b[0] = 5;
a[1] = 5; b[1] = 9;
a[2] = 1; b[2] = 6;

после сложения поразрядно у нас получается:
c[0] = 5;
c[1] = 14 - 10;
c[2] = 7 + 1;

PS модераторы, удалите нижний пост, пж
PSS прошу прощения

Последний раз редактировалось Sna1L; 12.02.2012 в 14:54.
Sna1L вне форума Ответить с цитированием
Старый 13.02.2012, 01:24   #3
fixtera
 
Регистрация: 23.01.2012
Сообщений: 5
По умолчанию

Спасибо, Sna1L;
Т.к. занятий было всего 4, то до масивов пока еще не добрались.
Нужно решить проблему с выравниванием цифр в столбик.
На самом деле, я здесь накорябал кое-чего, но т.к. в этом деле ламер - то просто чувствую, что накорябал через одно место, хотя прога почти работает.


Внимание вопрос:
Как упростить прогу - я имею в виду сам алгоритм словежения в столбик, и как все-таки избавиться от этих ненужных нулей, которые при счете в столбик на бумаге - не писались бы
Заранее всем спасибо.

Вот сий шедевр

Код:
#include <iostream>
#include <iomanip>
using namespace std;
int main()
{
int number1;
int number2;
int step1;
int step2; 
int step3;

int digit;
int digit2;
int digit3;
int total;
cout << "Enter first number: "; 
cin >> number1; 
cout << "Enter second number:"; 
cin >> number2; 
cout <<"                   -----" <<endl;
digit=number2%10;
step1=number1*digit;
cout <<"                    " << step1 <<endl;
digit2=number2%100-digit;
step2=number1*digit2;
cout << setprecision(4);
cout <<"                   " << step2 <<endl;
digit3=number2%1000 - (digit2+digit);
step3=number1*digit3;
cout <<"                  "<< step3 <<endl;
total=number1*number2;
cout <<"                   -----" <<endl;
cоut <<"                  " << total <<endl;
system ("pause"); 
return 0;
}

Последний раз редактировалось ACE Valery; 15.02.2012 в 14:41.
fixtera вне форума Ответить с цитированием
Старый 13.02.2012, 09:11   #4
Sna1L
Форумчанин
 
Аватар для Sna1L
 
Регистрация: 15.03.2011
Сообщений: 272
По умолчанию

Извиняюсь за первый пост. Думал что складывать надо
Насчет нулей: можно заполнять пробелами.
Т.е. вводим 2 числа. Производим операции и выводим.
Примерно будет выглядеть так:
Введите первое число: <ввод>
Введите второе число: <ввод>

(3пробела)число1
(3пробела)число2
----------------------------
(3пробела)шаг1
(2пробела)шаг2
(1пробела)шаг3

ну, алгоритм думаю сами придумаете
PS извиняюсь за страшное оформление
PSS оформляйте код правильно: пишите CODE в квадратных скобках или нажмите на значок решетки.

Последний раз редактировалось Sna1L; 13.02.2012 в 09:16.
Sna1L вне форума Ответить с цитированием
Старый 15.02.2012, 13:14   #5
turok7770
Пользователь
 
Регистрация: 12.01.2012
Сообщений: 17
По умолчанию

Вот реализация только на delphi

Код:
program Project13022012;

{$APPTYPE CONSOLE}

uses
  SysUtils;
  var
    mas2:array [1..3] of Integer;
    i,nomer1,nomer2,g,otb:Integer;
    str2:string;

begin

  Readln(nomer1,nomer2);
   str2:=IntToStr(nomer2);
   g:=Length(str2);

    for i:=1 to g  do
     begin
       mas2[i]:=StrToInt(str2[i]);
     end;

    for i:=g downto 1 do
     begin
       otb:=nomer1*mas2[i];
        Write('   ');
         Writeln(otb);
     end;

    otb:=nomer1*nomer2;
     write('  ');
      Writeln(otb);


 Readln;
end.
Если хотите отблагодарить меня - R526322326168

Единственное, что ограничивает полет мысли программиста-компилятор
turok7770 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Турбо ассемблер - построить массив путём сдвига исходного массива и умножить все элементы полученного массива на два Александр16 Помощь студентам 5 12.02.2012 20:30
заданные числа умножить на -5, 10. Flaik Помощь студентам 8 28.11.2011 15:20
курсовой проект-умножить два целых числа произвольной длины, представленных однонаправленными связаными списками некрон Паскаль, Turbo Pascal, PascalABC.NET 0 09.06.2011 23:04
Умножить и разделить числа Pavelok Общие вопросы Delphi 5 19.05.2009 21:04