Помощь - Поиск - Пользователи - Календарь
Полная версия: длинная арифметика
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
Dr. Froze
 ! 
Теги !


посмотрите пожалуйста
вобщем найти (n*(n+1)*(2*n+1))/6
program gg;
var z,j,x,y,n,k,p,i,a1,b1,c1:integer;
a,b,c,r,g,l:string;



procedure sum(a,b:string; n,k,i,a1,b1,c1,p:byte;var c:string);
begin
delete(c,1,255);
p:=0;
n:=length(a);
k:=length(b);
if n>k
then
for i:=k+1 to n do
b:='0'+b
else
begin
for i:=n+1 to k do
a:='0'+a;
n:=k;
end;
for i:=n downto 1 do
begin
a1:=ord(a[i])-ord('0');
b1:=ord(b[i])-ord('0');
c1:=(a1+b1+p)mod(10);
p:=(a1+b1+p)div(10);
c:=chr(c1+ord('0'))+c;
end;
if p>0
then
c:=chr(p+ord('0'))+c;
end;



procedure mul(a,b:string;
z,j,x,y,n,k,p,i:integer; var c:string);
begin
delete(c,1,255);
z:=0;
x:=0;
y:=0;
p:=0;
n:=length(a);
k:=length(b);
for i:=1 to n+k do
c:=c+'0';
for i:=k downto 1 do
begin
p:=0;
y:=ord(b[i])-ord('0');
for j:=n downto 1 do
begin
x:=ord(a[j])-ord('0');
z:=x*y+p+ord(c[i+j])-ord('0');
p:=(z)div(10);
c[i+j]:=chr((z mod 10)+ord('0'));
end;
end;
if c[1]='0' then delete(c,1,1);
end;



procedure del(a:string; n,i,p:integer; var c:string);
begin
delete(c,1,255);
p:=0;
n:=length(a);
for i:=1 to n do
begin
c:=c+chr( (ord(a[i])-ord('0')+10*p) div(6)+ord('0'));
p:=(ord(a[i])-ord('0'))mod(6);
end;
if c[1]='0' then delete(c,1,1);
end;



begin
assign(input,'input.pas');
reset(input);
assign(output,'output.pas');
rewrite(output);
readln®;
readln(g);
a:=r;
b:=g;
sum(a,b,n,k,i,a1,b1,c1,p,c);
a:=c;
b:=r;
mul(a,b,z,j,x,y,n,k,p,i,c);
l:=c;
a:=r;
b:=r;
sum(a,b,n,k,i,a1,b1,c1,p,c);
a:=c;
b:=g;
sum(a,b,n,k,i,a1,b1,c1,p,c);
a:=c;
b:=l;
mul(a,b,z,j,x,y,n,k,p,i,c);
del(a,n,i,p,c);
writeln©;
close(input);
close(output);

end.

ввести надо:
r=20000;
g=1;
мож у меня паскаль левый...?
compiler
както не стыкуется
Цитата
вобщем найти (n*(n+1)*(2*n+1))/6
и
Цитата
ввести надо:
r=20000;
g=1;

по заданию так..
var n:comp;
begin
readln(n);
n:=(n*(n+1)*(2*n+1)) / 6;
writeln(n);
readln;
read;
end.


Цитата
мож у меня паскаль левый...?
этого тут не кто не знает smile.gif
Dr. Froze
Цитата(compiler @ 19.05.2007 22:01) *

както не стыкуетсяи
по заданию так..
var n:comp;
begin
readln(n);
n:=(n*(n+1)*(2*n+1)) / 6;
writeln(n);
readln;
read;
end.


этого тут не кто не знает smile.gif

ну я же говорю, что задача на длинную арифметику...если я введу туда большое число, то не будет работать. поэтому вариант "n:=(n*(n+1)*(2*n+1)) / 6;
writeln(n);
отпадаетsmile.gif...
Люди...может кто-нибуь просто запустить то. что я написали сказать что выдает.
если написать :
3
1
и он выдаст 14, то работает правильно и нужно ввести значения:
200000
1
и вот мне ответ нужен...помогите плиииз!
compiler
если у тебя порядковые типы то знай
в LongInt Диапазон значений -2 147 483 648... +2 147 483 647
тебе мало? это не самая длинная арифметика


для 200000 получаем 170499978...

Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.