IPB
ЛогинПароль:

> Прочтите прежде чем задавать вопрос!

1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!

 
 Ответить  Открыть новую тему 
> длинная арифметика, написал задачу, вродеправильно..а она не правильно работает(
Dr. Froze
сообщение 19.05.2007 20:46
Сообщение #1





Группа: Пользователи
Сообщений: 7
Пол: Мужской
Реальное имя: Вова

Репутация: -  0  +


 ! 
Теги !


посмотрите пожалуйста
вобщем найти (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(r);
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(c);
close(input);
close(output);

end.

ввести надо:
r=20000;
g=1;
мож у меня паскаль левый...?

Сообщение отредактировано: klem4 - 19.05.2007 20:56
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
compiler
сообщение 19.05.2007 21:01
Сообщение #2


Человек
*****

Группа: Пользователи
Сообщений: 1 050
Пол: Мужской
Реальное имя: Станислав

Репутация: -  3  +


както не стыкуется
Цитата
вобщем найти (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

Сообщение отредактировано: compiler - 19.05.2007 21:16


--------------------
Спасибо!
Удачи!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Dr. Froze
сообщение 20.05.2007 11:56
Сообщение #3





Группа: Пользователи
Сообщений: 7
Пол: Мужской
Реальное имя: Вова

Репутация: -  0  +


Цитата(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
и вот мне ответ нужен...помогите плиииз!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
compiler
сообщение 20.05.2007 16:02
Сообщение #4


Человек
*****

Группа: Пользователи
Сообщений: 1 050
Пол: Мужской
Реальное имя: Станислав

Репутация: -  3  +


если у тебя порядковые типы то знай
в LongInt Диапазон значений -2 147 483 648... +2 147 483 647
тебе мало? это не самая длинная арифметика


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



--------------------
Спасибо!
Удачи!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 

- Текстовая версия 17.07.2025 19:55
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"