Другие языки программирования и технологии
СРОЧНО! Вопрос жизни и смерти Как умножать длинные числа на паскале?! При умножение иногда выдает переполнение ячейки.
Допустим мне нужно умножить очень длинное число A на не длинное B. И записать ответ в А. Как быть?
Смотря какой паскаль.
Pascal ABC имеет встроенный тип BigInteger.
С другими нужно развлекаться: http://ideone.com/JToYl8 - мой способ, а он отличается от правильного и неправильного
Просто сложение и умножение цифр, для реального числа нужны массивы TDigit.
Жутко неэффективно, зато демострируется как складывать и умножать без переполнения.
Pascal ABC имеет встроенный тип BigInteger.
С другими нужно развлекаться: http://ideone.com/JToYl8 - мой способ, а он отличается от правильного и неправильного
Просто сложение и умножение цифр, для реального числа нужны массивы TDigit.
Жутко неэффективно, зато демострируется как складывать и умножать без переполнения.
Смотря что пониается под "длинным числом". Если не хватает стандартных типов, есть библиотеки для работы с числами произвольной длины. Хотя я не представляю, для каких расчетов на практике могут понадобиться числа, выходящие за пределы диапазонов стандартных типов.
Тип Real
--Вопрос жизни и смерти
Тебе нужно пересмотреть систему ценностей.
Тебе нужно пересмотреть систему ценностей.
Например так
uses crt;
const nmax=100;
type ts = 0..9;
chislo=array[1..nmax] of ts;
procedure nul(var a:chislo);//обнуление массива
var i:1..nmax;
begin
for i:=1 to nmax do
a[i]:=0;
end;
function kol(const a: chislo):word;//количество значащих цифр
var i:1..nmax;
begin
i:=nmax;
while(a[i]=0)and(i>1) do
i:=i-1;
kol:=i;
end;
procedure umn(var a,b,c:chislo);//умножение столбиком
var i,g,n,m:1..nmax;
p:0..9;
v:byte;
begin
nul(c);
m:=kol(a);
n:=kol(b);
for i:=1 to m do
begin
p:=0;
for g:=1 to n do
begin
v:=a[i]*b[g]+p+c[i+g-1];
c[i+g-1]:=v mod 10;
p:=v div 10;
end;
c[i+n]:=p;
end;
end;
procedure sum(a,b:chislo;var c:chislo);//сложение, у нас просто добавление +1
var i,j,r:longint; p:0..9;
begin
nul(c);
p:=0;
for j:=1 to kol(a) do
begin
r:=b[j]+a[j]+p;
p:=r div 10;
c[j]:=r mod 10;
end;
c[j+1]:=p;
end;
var a,b,c,d,q:chislo;
i,f:integer;
begin
clrscr;
nul(b);
b[1]:=1;
nul(a);
a[1]:=7;a[2]:=1;//запишем число 17 наоборот
d:=a;//запомним
for i:=1 to 24 do//от 18 до 41
begin
sum(d,b,c);//+1
umn(a,c,q);//умножим
a:=q;//запомним
end;
for i:=kol(q) downto 1 do//вывод наоборот
write(q[i]);
readln
end.
uses crt;
const nmax=100;
type ts = 0..9;
chislo=array[1..nmax] of ts;
procedure nul(var a:chislo);//обнуление массива
var i:1..nmax;
begin
for i:=1 to nmax do
a[i]:=0;
end;
function kol(const a: chislo):word;//количество значащих цифр
var i:1..nmax;
begin
i:=nmax;
while(a[i]=0)and(i>1) do
i:=i-1;
kol:=i;
end;
procedure umn(var a,b,c:chislo);//умножение столбиком
var i,g,n,m:1..nmax;
p:0..9;
v:byte;
begin
nul(c);
m:=kol(a);
n:=kol(b);
for i:=1 to m do
begin
p:=0;
for g:=1 to n do
begin
v:=a[i]*b[g]+p+c[i+g-1];
c[i+g-1]:=v mod 10;
p:=v div 10;
end;
c[i+n]:=p;
end;
end;
procedure sum(a,b:chislo;var c:chislo);//сложение, у нас просто добавление +1
var i,j,r:longint; p:0..9;
begin
nul(c);
p:=0;
for j:=1 to kol(a) do
begin
r:=b[j]+a[j]+p;
p:=r div 10;
c[j]:=r mod 10;
end;
c[j+1]:=p;
end;
var a,b,c,d,q:chislo;
i,f:integer;
begin
clrscr;
nul(b);
b[1]:=1;
nul(a);
a[1]:=7;a[2]:=1;//запишем число 17 наоборот
d:=a;//запомним
for i:=1 to 24 do//от 18 до 41
begin
sum(d,b,c);//+1
umn(a,c,q);//умножим
a:=q;//запомним
end;
for i:=kol(q) downto 1 do//вывод наоборот
write(q[i]);
readln
end.
Использовать массив, где одна ячейка будет отвечать только за 1 цифру числа
Похожие вопросы
- народ,срочно!вопрос жизни и смерти!
- вставить число Х песле последнего положительного элемента в массиве В из 10 чисел ?на паскале... на паскале...
- Про генератор случайных чисел в Паскале!
- Объясните, что значит "найти цифры трехзначного числа" - язык Паскаль. Не врубаюсь совсем...
- Расскажите что-нибудь на тему арифметики длинных чисел на MIPS ассемблере?
- подскажите алгоритм решения задачи: Действительное число а. Использовать только умножение. Получить а^64 за 6 операций.
- как сформировать одномерный массив различных чисел в паскале?
- Paskal. Как округлять числа в паскале?
- Срочно,кто может взломать пороль в аське ,пожалуйста,вопрос жизни и смерти.
- народ,срочно!нужна ваша помощь!вопрос жизни и смерти!