Задание »

Saskaitīšana stabiņā

ID: summa2
Grūtība: 1/5
Laika limits: 1


Uzdevums

Uz papīra lapas tika uzrakstīts naturāls skaitlis anan-1an-2…a2a1, kura visi cipari bija lielāki par 0.
Skaitlim bija ne vairāk kā 100 cipari.
Pēc tam zem šī skaitļa stabiņā tika uzrakstīti skaitļi an-1an-2…a2a1 , an-2…a2a1,…., a2a1, a1.
Beigās visi skaitļi tika saskaitīti. Piemērs, kad sākotnējais skaitlis ir 7231493, parādīts zīmējumā.

7231493
 231493
  31493
   1493
    493
     93
      3
-------
7496561

Uzrakstiet programmu, kas ievadītam sākotnējam skaitlim izvada aprēķināto summu.

Ievaddati

Teksta faila summa2.invienīgajā rindā dots sākumā uz lapas uzrakstītais skaitlis.

Izvaddati

Teksta faila summa2.out vienīgajā rindā jāizvada viens skaitlis – aprēķinātā summa.

Piemērs

summa2.in summa2.out
7231493
7496561

Atsauces

Uzdevums izmantots Latvijas 14.informātikas olimpiādes I (skolas) kārtā.
Autors: M.Opmanis


© 2001-2002 olimps! http://www.lio.lv/olimps/

Решение »

var s,s1:string;
c:array [1..102] of string;
code,i,i2,l,p,k,d,d2,sko,s_li,sob:integer;
f:text;
begin
Assign(f,'summa2.in');
Reset(f);
read(f,s);
Close(f);
sko:=1;{ Po skoljko simvolov bratj }
l:=length(s) div sko;{ Skoljko chastej po sko shtuk }
p:=length(s);
k:=1;
sob:=0;
for i:=1 to l do begin
s1:=Copy(s,p,sko);
p:=p-sko;
val(s1,s_li,code);
d:=10;
d2:=1;
for i2:=1 to sko do begin
sob:=sob + ((s_li mod d div d2 * (length(s)-k+1))*d2);
d:=d*10;
d2:=d2*10;
inc(k);
end;
if sob/10>0 then begin
str(sob,s1);
c[i]:=Copy(s1,length(s1),sko);
sob:=sob div 10;
end
else sob:=0;
end;
if sob>0 then begin
inc(l);
str(sob,c[i+1]);
end
else c[i+1]:=s[1];
s1:='';
for i:=l downto 1 do begin
s1:=s1+c[i];
end;
Assign(f,'summa2.out');
Rewrite(f);
write(f,s1);
Close(f);
end.

Результат: 10/10

Добавить комментарий