Announcement

Collapse
No announcement yet.

[Lập trình newbie] Mỗi ngày một bài toán (số 3)

Collapse
X
 
  • Filter
  • Time
  • Show
Clear All
new posts

  • [Lập trình newbie] Mỗi ngày một bài toán (số 3)

    Chào một ngày mới tươi đẹp :sogood:.
    Bài này là một bài toán khá quen thuộc:
    Cho hai số nguyên dương A và B ( A & B có không quá 1000 chữ số )
    Yêu cầu:Tính A + B, A - B, A * B


    Chú ý:

    Khi kết quả là 0 các bạn phải in ra 0, nếu in -0 là sai
    Các chữ số 0 không có nghĩa ở đầu không được in ra.
    VD 013 thì phải in ra là 13, chữ số 0 ở đầu không có nghĩa


    Input

    Dòng 1: số nguyên A
    Dòng 2: số nguyên B


    Output

    Dòng 1: Kết quả A + B
    Dòng 2: Kết quả A - B
    Dòng 3: Kết quả A * B


    Example

    Input:
    10
    11

    Output:
    21
    -1
    110


    Nguồn: http://vnoi.info
    Let's go :dreaming:
    Facebook: Kiều Thắng
    Google Plus: Kiều Thắng
    Thông tin về du học các nước: Du học.


  • #2
    này dùng mảng à . Này từng làm rồi, h mần lại
    Last edited by 11520132; 08-07-2012, 17:27.

    Comment


    • #3
      Mã số bài này là gì vậy anh, để em còn nộp xem mình làm đúng hay sai nữa
      University of Information Technology
      Cao Văn Nhàn _ CE10520355
      SĐT: 0188 403 4943

      Email: caovannhan2002@gmail.com

      Comment


      • #4
        Mã bài "
        BIGNUM
        " :happy:
        Facebook: Kiều Thắng
        Google Plus: Kiều Thắng
        Thông tin về du học các nước: Du học.

        Comment


        • #5
          làm sao để in ra a/b đây, =))
          Phạm Minh Tâm
          Phone: 01643-652-922
          Skype ID: tampham47@live.com

          Comment


          • #6
            2 ngày 1 bài đi a, đuối wa cứ ngày chẵn (hoặc lẻ) ra đề ,hixhix

            Comment


            • #7
              Originally posted by 09520434 View Post
              làm sao để in ra a/b đây, =))
              a/b thì số lớn vs số nguyên thì dễ, còn 2 số lớn thì hình như khá phức tạp :brick:
              Don't depend too much on anyone in this world. Because even your shadow leaves you when you're in darkness.

              Comment


              • #8
                Khi nào có một bạn giải được coi như kết thúc (có post code và kết quả) :shy:
                Facebook: Kiều Thắng
                Google Plus: Kiều Thắng
                Thông tin về du học các nước: Du học.

                Comment


                • #9
                  code pascal dc ko anh :nosebleed:
                  Don't depend too much on anyone in this world. Because even your shadow leaves you when you're in darkness.

                  Comment


                  • #10
                    oạch, chưa có ai giải hết à, sắp hết ngày rồi, :-s

                    Comment


                    • #11
                      Originally posted by quoctinvn View Post
                      code pascal dc ko anh :nosebleed:
                      Code pascal cũng được
                      Henry Nguyễn (Điệp Nguyễn MBA)
                      --
                      MBA, Sales Director, Co-founder - MYTH VIET NAM TECHNOLOGY CO., LTD - http://myth.vn/
                      Email: diepnguyenmba@gmail.com - Phone: 0905.504.386

                      Comment


                      • #12
                        Code:
                        {$H+}
                        uses math;
                        const
                           fi = '';
                           fo = '';
                           digit = 9;
                           base = 1000000000;
                           maxd = 250;
                        type
                           bigint = array[1..maxd+1] of int64;
                        var
                           f1,f2 : text;
                        
                        procedure openfiles;
                        begin
                           assign(f1,fi); reset(f1);
                           assign(f2,fo); rewrite(f2);
                        end;
                        
                        procedure closefiles;
                        begin
                           close(f1); close(f2);
                        end;
                        
                        operator + (var a,b : bigint) c : bigint;
                        var
                           i,cr : longint;
                        begin
                           fillchar(c,sizeof(c),0);   cr := 0;
                           for i := maxd downto 1 do
                              begin
                                 c[i] := a[i]+b[i]+cr;
                                 if c[i] > base then
                                    begin
                                       c[i] := c[i]-base;
                                       cr := 1;
                                    end
                                 else cr := 0;
                              end;
                        end;
                        
                        operator * (var a,b : bigint) c : bigint;
                        var
                           i,j,k,cr : longint;
                        begin
                           fillchar(c,sizeof(c),0);
                           for i := maxd downto 1 do
                              begin
                                 cr := 0;
                                 for j := maxd downto 1 do
                                    if i+j > maxd then
                                       begin
                                          k := i+j-maxd;
                                          c[k] := c[k]+a[i]*b[j]+cr;
                                          cr := c[k] div base;
                                          c[k] := c[k] mod base;
                                       end;
                              end;
                        end;
                        
                        operator - (var a,b : bigint) c : bigint;
                        var
                           i,cr : longint;
                        begin
                           fillchar(c,sizeof(c),0);   cr := 0;
                           for i := maxd downto 1 do
                              begin
                                 c[i] := a[i]-b[i]-cr;
                                 if c[i] < 0 then
                                    begin
                                       c[i] := c[i]+base;
                                       cr := 1;
                                    end
                                 else cr := 0;
                              end;
                        end;
                        
                        operator >= (var a,b : bigint) c : boolean;
                        var
                           i : longint;
                        begin
                           for i := maxd downto 1 do if a[i]=0 then break;
                           if b[i] <> 0 then exit(false);
                           while (a[i] = b[i]) and (i < maxd) do inc(i);
                           if a[i]>=b[i] then exit(true) else exit(false);
                        end;
                        
                        function valueOf(a : string) : bigint;
                        var
                           i : longint;
                           q : string;
                        begin
                           fillchar(valueOf,sizeof(valueOf),0);   i := maxd;
                           while length(a) > 0 do
                              begin
                                 q := copy(a,length(a)-digit+1,digit);
                                 val(q,valueOf[i]);
                                 delete(a,max(1,length(a)-digit+1),digit);
                                 dec(i);
                              end;
                        end;
                        
                        function tostring(a : bigint) : string;
                        var
                           i : longint;
                           s,q : string;
                        begin
                           for i := 1 to maxd do if a[i] <> 0 then break;
                           if a[i]=0 then exit('0');
                           str(a[i],q); s := q;
                           for i := i+1 to maxd do
                              begin
                                 str(a[i],q);
                                 while length(q) < digit do q := '0'+q;
                                 s := s+q;
                              end;
                           exit(s);
                        end;
                        
                        procedure solve;
                        var
                           a,b : string;
                           aa,bb : bigint;
                        begin
                           readln(f1,a); readln(f1,b);
                           aa := valueOf(a); bb := valueOf(b);
                           writeln(f2,tostring(aa+bb));
                           if aa>=bb then
                              writeln(f2,tostring(aa-bb))
                           else
                              writeln(f2,'-',tostring(bb-aa));
                           writeln(f2,tostring(aa*bb));
                        end;
                        
                        begin
                           openfiles;
                           solve;
                           closefiles;
                        end.
                        fang cái code pascal lên vậy :go:
                        thuật tính số lớn bằng mảng của em là như vầy : thay vì mỗi lần cộng trừ nhân lần lượt các chữ số của 1 số, thì mình sẽ cộng trừ nhân mỗi lần digit chữ số của 2 số đó. Như trong code của em là 9 chữ số. Kết quả được lưu trong mảng gồm 250 phần tử, mỗi phần tử đại diện cho 9 chữ số của số đó.
                        Last edited by quoctinvn; 09-07-2012, 15:44.
                        Don't depend too much on anyone in this world. Because even your shadow leaves you when you're in darkness.

                        Comment


                        • #13
                          Mình nghĩ code post lên nên là ngôn ngữ C/C++ vì là ngôn ngữ trường mình dạy đầu tiên, nên mọi người ai cũng hiểu. Chứ post những ngôn ngữ khác, có những bạn ko biết ngôn ngữ đó thì chẳng hiểu code và học hỏi được gì cả. Với lại code post lên phải là bài làm đúng (đã accepted khi nộp).
                          University of Information Technology
                          Cao Văn Nhàn _ CE10520355
                          SĐT: 0188 403 4943

                          Email: caovannhan2002@gmail.com

                          Comment


                          • #14
                            Originally posted by 10520355 View Post
                            Mình nghĩ code post lên nên là ngôn ngữ C/C++ vì là ngôn ngữ trường mình dạy đầu tiên, nên mọi người ai cũng hiểu. Chứ post những ngôn ngữ khác, có những bạn ko biết ngôn ngữ đó thì chẳng hiểu code và học hỏi được gì cả. Với lại code post lên phải là bài làm đúng (đã accepted khi nộp).
                            C++ là ngôn ngữ đầu tiên ở UIT, Pascal là ngôn ngữ của người ta học từ thời cấp 3 thậm chí cấp 2; với lại ở đây đích chính là trao đổi giải thuật chứ đâu có trao đổi code.
                            Ngôn ngữ càng thấp giải 1 bài toán sẽ chứng tỏ khả năng của người giải hơn là một ngôn ngữ cao.

                            Comment


                            • #15
                              Pascal học từ thời cấp 3, nhưng chỉ có những lớp chuyên tin mới học thôi. Với các bạn cấp 3 ko phải chuyên tin hay chưa học pascal, thì C là ngôn ngữ đầu tiên. Yêu cầu post code là của chủ topic, mình chỉ góp ý thôi mà. Xét về mặt giải thuật thì pascal ngang với C++.
                              University of Information Technology
                              Cao Văn Nhàn _ CE10520355
                              SĐT: 0188 403 4943

                              Email: caovannhan2002@gmail.com

                              Comment

                              LHQC

                              Collapse
                              Working...
                              X