0 / 0 / 0
Регистрация: 24.12.2013
Сообщений: 7
1

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

20.03.2014, 15:28. Показов 2491. Ответов 1
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
программа перемножения двух целых чисел в столбик. числа задаются в программе в виде двух массивов цифр. на экран должен быть выведен результат вместе с промежуточными действиями. не разрешается пользоваться операцией умножения при вычислениях. Указание: создайте и используйте таблицу умножения. паскаль
заранее спасибо.
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
20.03.2014, 15:28
Ответы с готовыми решениями:

Процедура перемножения двух восьми-разрядных целых чисел (i8085)
Составить программу процедуры перемножения двух восьми-разрядных целых чисел. Сомножители...

Написать программу умножения двух целых чисел "в столбик"
Числа задаются в программе в виде двух массивов цифр. Вот мой код, но он почему-то не работает. Что...

Программа расчета квадрата двух целых чисел
Создать программу расчета квадрата двух целых чисел, объявленных как переменные.

Программа вычисления наибольшего общего делителя двух целых чисел
Прошу помочь с задачей. Где у меня ошибка? Задача: напишите программу вычисления наибольшего...

1
1646 / 1075 / 1081
Регистрация: 03.07.2013
Сообщений: 4,507
25.03.2014, 13:07 2
Лучший ответ Сообщение было отмечено kirill19yo как решение

Решение

Кликните здесь для просмотра всего текста
Pascal
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
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
Const
  N = 255;
  TabMul : array[0..9,0..9] of Byte = ((0, 0, 0, 0, 0, 0, 0, 0, 0, 0),
                                       (0, 1, 2, 3, 4, 5, 6, 7, 8, 9),
                                       (0, 2, 4, 6, 8,10,12,14,16,18),
                                       (0, 3, 6, 9,12,15,18,21,24,27),
                                       (0, 4, 8,12,16,20,24,28,32,36),
                                       (0, 5,10,15,20,25,30,35,40,45),
                                       (0, 6,12,18,24,30,36,42,48,54),
                                       (0, 7,14,21,28,35,42,49,56,63),
                                       (0, 8,16,24,32,40,48,56,64,72),
                                       (0, 9,18,27,36,45,54,63,72,81));
Type
  cif = 0..9;
  tmas = array[1..N] of cif;
 
Var
  a,a1,a2 : tmas;
  an1,an2 : Longint;
 
Procedure ResetTM(var mm : tmas);
Var ii : Integer;
Begin
  For ii:=1 to N do mm[ii]:=0;
End;
 
Procedure GetLongNumSt(S : String; var m : tmas);
Var i : Integer;
Begin
  For i:=1 to N-Length(S) do m[i]:=0;
  For i:=Length(S) downto 1 do m[N-Length(S)+i]:=Ord(S[i])-Ord('0');
End;
 
Procedure GetLongNumInt(SL : Longint; var m : tmas);
Var i,k : Integer;
Begin
  ResetTM(m);
  k:=SL; i:=N;
  While (k>0) and (i>0) do
  Begin
    m[i]:=k mod 10;
    k:=k div 10;
    Dec(i);
  End;
End;
 
Procedure LongNumInSt(m : tmas; var S : String);
Var i,k : Integer;
Begin
  S:='';
  For k:=1 to N do If m[k]<>0 then Break;
  For i:=N downto k do S:=Chr(m[i]+Ord('0'))+S;
End;
 
Procedure ShowLongNum(m : tmas);
Var S : String;
Begin
  LongNumInSt(m,S);
  Writeln(S);
End;
 
Procedure LongSum(m1,m2 : tmas; var m : tmas);
Var i,k : Integer;
Begin
  k:=0;
  For i:=N downto 1 do
  Begin
    If m1[i]+m2[i]+k>9 then
    Begin
      m[i]:=(m1[i]+m2[i]+k) mod 10;
      k:=1;
    End
      else
      Begin
        m[i]:=m1[i]+m2[i]+k;
        k:=0;
      End;
  End;
End;
 
Function Mul10(m0 : tmas; k : Integer) : tmas; { shift to left }
Var
  m : tmas;
  i : Integer;
Begin
  If k=0 then Mul10:=m0 else
  Begin
    m:=m0;
    For i:=k+1 to N-k do m[i]:=m[i+k];
    For i:=N-k+1 to N do m[i]:=0;
    Mul10:=m;
  End;
End;
 
Procedure Mul(m1,m2 : tmas; var m : tmas);
Var
  kk         : Byte;     { overflow }
  i,j,n1,n2  : Integer;
  tm         : tmas;
Begin
  For i:=1 to N do If m1[i]<>0 then Break;
  n1:=i;
  For i:=1 to N do If m2[i]<>0 then Break;
  n2:=i;
  kk:=0;
  ResetTM(m);
  For j:=N downto n2 do
  Begin
    ResetTM(tm);
    For i:=N downto n1 do
    Begin
      If TabMul[m1[i],m2[j]]+kk>9 then
      Begin
        tm[i]:=(TabMul[m1[i],m2[j]]+kk) mod 10;
        kk:=(TabMul[m1[i],m2[j]]+kk) div 10;
      End
        else
        Begin
          tm[i]:=TabMul[m1[i],m2[j]]+kk;
          kk:=0;
        End;
    End;
    If (kk<>0) and (n1>1) then tm[n1-1]:=kk;
    LongSum(m,Mul10(tm,N-j),m);
  End;
End;
 
Begin
  { == DEMO-TEST == }
  GetLongNumSt('1234567890',a1);
  GetLongNumInt(987654321,a2);   
  ShowLongNum(a1);
  ShowLongNum(a2);
  ShowLongNum(Mul10(a1,10));     { a1*10000000000 }
  LongSum(a1,a2,a);              { a1+a2 = 2222222211 }
  ShowLongNum(a);
  Mul(a1,a2,a);                  { a1*a2 = 1219326311126352690 }
  ShowLongNum(a);
  { =============== }
End.


Осталось только приделать вывод промежуточных действий... - это не сложно; может быть сложно будет вывести эти данные именно в том формате, в котором мы привыкли это видеть на бумаге, вычисляя в столбик...
1
25.03.2014, 13:07
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
25.03.2014, 13:07
Помогаю со студенческими работами здесь

Даны два целых числа А и В, A> B. Выведите на экран результат перемножения всех чисел от А до В
:cry:Помогите

Программа для ввода двух квадратных матриц, их перемножения и вывода результирующей
Очень срочно!Помогите пожалуйста написать программу на языке Паскаль: Напишите программу для ввода...

Вычислительная сложность алгоритма Египетского перемножения двух чисел
Помогите понять какова вычислительная сложность алгоритма перемножения двух чисел по Египетскому...

Программа, которая проверяла бы, не приводит ли суммирование двух целых чисел А и В к переполнению
Исходные данные ввести в диалоге с клавиатуры. На экран вывести исходные данные и результаты...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2023, CyberForum.ru