aboutsummaryrefslogtreecommitdiff
path: root/0013/main.pas
diff options
context:
space:
mode:
authorMistivia <i@mistivia.com>2025-08-27 15:28:59 +0800
committerMistivia <i@mistivia.com>2025-08-27 15:28:59 +0800
commit9f4bae54801d78426b7089d0ab13f45f57656b3b (patch)
tree593ba04a95f3e6e7fe926af2168ffa6bffecc4d7 /0013/main.pas
parent16bb535cdf949eaed2c4981166d82db092915532 (diff)
solve 13
Diffstat (limited to '0013/main.pas')
-rw-r--r--0013/main.pas98
1 files changed, 98 insertions, 0 deletions
diff --git a/0013/main.pas b/0013/main.pas
new file mode 100644
index 0000000..6d473be
--- /dev/null
+++ b/0013/main.pas
@@ -0,0 +1,98 @@
+program main;
+
+uses
+ Vector_Prim.Integer;
+
+type
+ TVec = Vector_Prim.Integer.TVector;
+
+procedure revvec(var vec: TVec);
+var
+ i: Longint;
+ j: Longint;
+ t: Integer;
+begin
+ i := 0;
+ j := vec.len-1;
+ while i < j do
+ begin
+ t := vec.buf[i];
+ vec.buf[i] := vec.buf[j];
+ vec.buf[j] := t;
+ i := i + 1;
+ j := j - 1;
+ end;
+end;
+
+function readnum(): TVec;
+var
+ v: TVec;
+ c: Char;
+begin
+ init(v);
+ while true do
+ begin
+ if eof then
+ break;
+ read(c);
+ if c = #10 then
+ break;
+ push_elem(v, ord(c) - ord('0'));
+ end;
+ revvec(v);
+ readnum := v;
+end;
+
+function add(a: TVec; b: TVec): TVec;
+var
+ ret: TVec;
+ carry, len, i, reg: Integer;
+ na, nb: Integer;
+begin
+ init(ret);
+ carry := 0;
+ len := a.len;
+ if b.len > len then
+ len := b.len;
+
+ for i := 0 to len-1 do
+ begin
+ na := 0;
+ nb := 0;
+ if i < a.len then
+ na := a.buf[i];
+ if i < b.len then
+ nb := b.buf[i];
+ reg := na + nb + carry;
+ carry := reg div 10;
+ push_elem(ret, reg mod 10);
+ end;
+ if carry <> 0 then
+ push_elem(ret, 1);
+ add := ret;
+end;
+
+procedure printnum(n: TVec);
+var
+ i: Integer;
+begin
+ for i := n.len-1 downto n.len-10 do
+ write(chr(ord('0') + n.buf[i]));
+ writeln('');
+end;
+
+const
+ N = 100;
+var
+ nums: Array[1..N] of TVec;
+ res: TVec;
+ i: Integer;
+begin
+ init(res);
+ for i := 1 to N do
+ nums[i] := readnum();
+ res := nums[1];
+ for i := 2 to N do
+ res := add(res, nums[i]);
+ printnum(res);
+end.