Sunday, June 26, 2022
  • Home
    • Donate
    • Liên Hệ Tân Hồng IT
    • Yêu Cầu Phần Mềm, Thủ Thuật
    • Hướng dẫn tải File
  • Tài Liệu
  • Phần Mềm
  • Công cụ
  • Thủ Thuật
  • Download
  • Giải trí
  • Kiến thức
Tân Hồng IT
  • Home
    • Liên Hệ TanHongIT – các bạn có thể liên hệ với TanHongIT.Net Tại Đây
    • Donate – TanHongIT.Net
    • Yêu Cầu Phần Mềm, Thủ Thuật
    • Hướng dẫn tải File, phần mềm và các loại tài liệu khác trên TanHongIT.Net
  • Orther
    • Tool Online
      • Test Code Online
      • EnCoder SVG
      • HTML Converter
    • ShareVui – Online Movies
  • Tài Liệu
  • Code
    • PHP
    • Java
    • JavaScript
  • Kiến thức
  • Phần Mềm
  • Công cụ
  • Thủ Thuật
  • Download
  • Giải trí
No Result
View All Result
  • Home
    • Liên Hệ TanHongIT – các bạn có thể liên hệ với TanHongIT.Net Tại Đây
    • Donate – TanHongIT.Net
    • Yêu Cầu Phần Mềm, Thủ Thuật
    • Hướng dẫn tải File, phần mềm và các loại tài liệu khác trên TanHongIT.Net
  • Orther
    • Tool Online
      • Test Code Online
      • EnCoder SVG
      • HTML Converter
    • ShareVui – Online Movies
  • Tài Liệu
  • Code
    • PHP
    • Java
    • JavaScript
  • Kiến thức
  • Phần Mềm
  • Công cụ
  • Thủ Thuật
  • Download
  • Giải trí
No Result
View All Result
Tân Hồng IT
No Result
View All Result
Home Code

Thuật Toán Tính Tổng Cộng Hai Số Cực Lớn JAVA

Tân Hồng IT by Tân Hồng IT
04/10/2019
in Code, Java, Kiến thức, Kiến Thức Lập Trình
Reading Time: 7 mins read
A A
0
QUẢNG CÁO

Trong bài viết này mình sẽ chia sẻ cho các bạn cách tính cộng hai số cực lớn code bằng ngôn ngữ java để cho các bạn tham khảo nhé!

Về vấn đề cộng hai số cực lớn thì bạn phải nghĩ cách lưu được số lớn đó vào trong bộ nhớ. Vê lưu số lớn thì có 2 cách: bạn có thể dùng một mảng số nguyên hoặc dùng một chuỗi kí tự để lưu nó lại. Ở đây mình sẽ dùng phương pháp thứ 2 là cho nó vào một chuỗi String để thực hiện phép tính.

cong hai so cuc lon

Mỗi thằng có một lợi điểm riêng, như dùng mảng số nguyên thì không phải mất công chuyển đổi từ kiểu string sang int để tính toán, ..

Đó là việc lưu trữ. Còn về việc tính toán thì lúc này bạn có thể sử dụng cách tính cộng thủ công theo phương pháp cấp 1: tức là cộng lần lượt từ phải sang trái, và có nhớ khi cộng.

Luyên thuyên đủ rồi, giờ mình sẽ giải thích phương pháp của mình nhé!

Mục Lục Bài Viết

  • Cách 1: Dùng Thuật toán Cộng Hai Số Cực Lớn JAVA
  • Cách 2: Sử dụng BigInteger để cộng hai số cực lớn.
  • Cách 3: Sử dụng BigDecimal để cộng hai số cực lớn.
  • Và Cách 4: Bạn cũng có thể sử dụng LinkedList để cộng hai số lớn.

Cách 1: Dùng Thuật toán Cộng Hai Số Cực Lớn JAVA

Bước 1: Nhập 2 số nguyên lớn bằng phương pháp nhập theo kiểu chuỗi String.

    //tạo mot ham nhap   
    static void nhap() {
        String s1, s2;
        Scanner s = new Scanner(System.in);
        System.out.println("Nhap 2 so nguyen lon. ");
        System.out.print("Nhap so nguyen thu nhat: ");
        s1 = s.next();
        System.out.print("Nhap so nguyen thu hai: ");
        s2 = s.next();
    }

Bước 2: Tạo một hàm đảo ngược chuỗi. (Mình muốn chuyển ngược chuỗi, ví dụ có chuỗi “1234” thì sẽ được đảo thành “4321“. Mục đích của mình là thực hiện phép cộng lần lượt từ trái qua phải.)

    
    static String daoXau(String s) {
        String s1 = "";
        for (int i = 0; i < s.length(); i++) {
            s1 += s.charAt(s.length() - 1 - i);
        }
        return s1; //xuat chuoi sau khi dao
    }

Bước 3: Tạo Hàm tính tổng.

    //tạo mot ham tinh tong 
    static String add(String s1, String s2) {
        String s = "";
    
        int len1 = s1.length();
        int len2 = s2.length();
        int max = max(len1, len2); //ham max length xuat ra gia tri chieu dai lon nhat trong 2 chuoi
        s1 = daoXau(s1);
        s2 = daoXau(s2);
    
        //thuc hien noi them so 0 vao chuoi voi muc dich lam cho 2 chuoi so bang nhau
        if (max > len1) {
            for (int i = max; i >= len1; i--) {
                s1 += "0";
            }
        }
        if (max > len2) {
            for (int i = max; i >= len2; i--) {
                s2 += "0";
            }
        }
        
        //thuc hien phep cong
        int soGhiNho = 0;
        for (int i = 0; i < max; i++) {
            int tong = 0;
            //charAt ky tu tai vi tri thu i trong xau
            tong = s1.charAt(i) - '0' + s2.charAt(i) - '0' + soGhiNho;
            s += tong % 10;
            soGhiNho = tong / 10;
        }
        if (soGhiNho == 1) {
            s += 1;
        }
        //thuc hien dao xau truoc khi xuat
        s = daoXau(s);
        return s;
    }

Vì mình thực hiện phép cộng từ trái sang phải nên kết quả sau khi tính ra sẽ bị ngược. Vì thế ở cuối hàm cộng trêm, mình phải thực hiện đảo chuỗi một lần nữa rồi mới cho return ra.

Như vậy ta sẽ có được Code Hoàn chỉnh như sau:

public class CongSoNguyenLon {
    public static void main(String[] args) {
        nhap();
    }
    static String daoXau(String s) {
        String s1 = "";
        for (int i = 0; i < s.length(); i++) {
            s1 += s.charAt(s.length() - 1 - i);
        }
        return s1; //chuoi sau khi dao
    }
    static String add(String s1, String s2) {
        String s = "";
    
        int len1 = s1.length();
        int len2 = s2.length();
        int max = max(len1, len2); //ham max length xuat ra gia tri chieu dai lon nhat trong 2 chuoi
        s1 = daoXau(s1);
        s2 = daoXau(s2);
        
        //thuc hien noi them so 0 vao chuoi voi muc dich lam cho 2 chuoi so bang nhau
        if (max > len1) {
            for (int i = max; i >= len1; i--) {
                s1 += "0";
            }
        }
        if (max > len2) {
            for (int i = max; i >= len2; i--) {
                s2 += "0";
            }
        }
        
        //thuc hien phep cong
        int soGhiNho = 0;
        for (int i = 0; i < max; i++) {
            int tong = 0;
            //charAt ky tu tai vi tri thu i trong xau
            tong = s1.charAt(i) - '0' + s2.charAt(i) - '0' + soGhiNho;
            s += tong % 10;
            soGhiNho = tong / 10;
        }
        if (soGhiNho == 1) {
            s += 1;
        }
        //thuc hien dao xau truoc khi xuat
        s = daoXau(s);
        return s;
    }
    static void nhap() {
        String s1, s2;
        Scanner s = new Scanner(System.in);
        System.out.println("Nhap 2 so nguyen lon. ");
        System.out.print("Nhap so nguyen thu nhat: ");
        s1 = s.next();
        System.out.print("Nhap so nguyen thu hai: ");
        s2 = s.next();
        //xuat tong
        System.out.println();
        String ss = add(s1, s2);
        System.out.println("Tong 2 so nguyen lon: " + ss);
    }
}

Đây là kết quả:

Đó là thuật toán hàn chỉnh để tính cộng hai số cực lớn, nếu code mình có sai sót ở đâu mong được sự chỉ giáo của các bạn. 

Ngoài thuật toán mình build ở trên ra. Java thực chất đã có bộ thư viện khổng lồ nhằm phục vụ cho các bạn rồi nên các bạn cũng có thể sử dụng BigDecimal hoặc BigInteger để thực hiện phép cộng này nhé!

Cách 2: Sử dụng BigInteger để cộng hai số cực lớn.

public static void main(String[] args)
    { 
        BigInteger num1,num2;
        num1 = new BigInteger("655555555555555555554365435555555555555544745765476547654765476476");
        num2 = new BigInteger("65555555465547654755543654365465555555555547654755554765755555555544745765476547654765476476");
        System.out.println("Tong: " + num1.add(num2));
        System.out.println("Hieu: " + num1.subtract(num2));
        System.out.println("Tich: " + num1.multiply(num2));
        System.out.println("Thuong: " + num1.divide(num2));
    }

Cách 3: Sử dụng BigDecimal để cộng hai số cực lớn.

public static void main(String[] args) {
        Scanner input = new Scanner(System.in);
        BigDecimal a,b,c;
        System.out.print("Nhap a: ");
        a = new BigDecimal(input.next());
        System.out.print("Nhap b: ");
        b = new BigDecimal(input.next());
        
        c = a.add(b);
        
        System.out.println("c = a + b = " + c);
    }

Và Cách 4: Bạn cũng có thể sử dụng LinkedList để cộng hai số lớn.

public static void main(String[] args)
    {   
        Scanner scan = new Scanner(System.in);
        /* Create Linked Lists */
        LinkedList<Integer> num1 = new LinkedList<Integer>();
        LinkedList<Integer> num2 = new LinkedList<Integer>();
        LinkedList<Integer> ans = new LinkedList<Integer>();
        /* Accept numbers */
        System.out.println("Adding Large Numbers Using Linked Lists Test\n");
        System.out.println("Enter number 1");
        String s1 = scan.next();
        System.out.println("Enter number 2");
        String s2 = scan.next();
        /* Store digits in lists */
        int l1 = s1.length(), l2 = s2.length();       
        for (int i = l1 - 1; i >= 0; i--)
            num1.add(s1.charAt(i) - '0');
        for (int i = l2 - 1; i >= 0; i--)
            num2.add(s2.charAt(i) - '0');
        /* Adding digits and storing in ans list */
        int len = l1 > l2 ? l1 : l2;
        int carry = 0;
        for (int i = 0; i < len; i++)
        {
            int d1 = 0, d2 = 0;           
            try {
                d1 = num1.get(i);
            }
            catch(Exception e){}           
            try {
                d2 = num2.get(i);
            }
            catch(Exception e){}                       
            int x = d1 + d2 + carry;
            ans.add(x % 10);
            carry = x / 10;
        }
        /* Adding carry */
        while (carry != 0)
        {
            ans.add(carry % 10);
            carry /= 10;
        }
        /* Printing ans list */
        System.out.print("\nSum = ");
        for (int i = ans.size() - 1; i >= 0; i--)
            System.out.print(ans.get(i));
        System.out.println();       
    }

Nếu có vấn đề hay thắc mắc gì hoặc bạn không biết cách chỉnh sửa thì hãy bình luận bên dưới để cùng trao đổi và giúp đỡ các bạn nhé!

Xem thêm:

  • Share code game MegamanX3 viết bằng C++
  • Chia sẻ 6 mẫu Code Form Login giao diện cực đẹp và dễ thương cho Website
  • Share Source Code Chào Mừng Năm Mới Với Hiệu Ứng Tuyệt Đẹp
  • Share Source Code Count-Down Đếm ngược thời gian phong cách J2team

CHÚC CÁC BẠN THÀNH CÔNG VÀ VUI VẺ 

 
5/5 - (2 votes)
Tags: CodeJavaKiến thứcKiếnThức Lập Trình
ShareTweetSend
Bài viết trước

Những Plugin Extensions Hỗ Trợ không thể thiếu cho VSCode

Bài tiếp theo

Mở và Đọc File Word Trong C# Với Microsoft Office Interop Word dll

Tân Hồng IT

Tân Hồng IT

Không có một lời khuyên hay câu triết lý nào có đủ khả năng để áp đặt vào mọi hoàn cảnh trong cuộc sống của chúng ta cả. Nó luôn có những ngoại lệ riêng biệt...

Liên quan Posts

phuong thuc get post trong php
Backend

Bài 13: Phương thức GET và POST trong PHP

06/02/2020
chuoi string va cac ham xu ly trong php
Backend

Bài 12: Chuỗi (String) Và Các Hàm Xử Lý Chuỗi Trong PHP

25/01/2020
cac ham xu ly mang php
Backend

Bài 11: Các hàm xử lý mảng (Array) trong PHP

19/01/2020 - Updated on 21/01/2020
mang array trong php
Backend

Bài 10: Mảng (Array) Trong PHP

16/01/2020
code web nam moi 2020
Code

Share Code Đếm Ngược Chào Mừng Năm Mới 2020 Với Hiệu Ứng Tuyệt Đẹp

14/01/2020
ham function trong php
Backend

Bài 9: Hàm (Function) Trong PHP

14/01/2020
lenh va function thuong dung trong php
Backend

Bài 8: lệnh Break, Continue và các hàm (function) exit, die thường dùng trong PHP

10/01/2020 - Updated on 11/01/2020
vong lap foreach trong php
Code

Bài 7: Vòng lặp Foreach trong PHP (Các loại vòng lặp phần 2)

01/01/2020 - Updated on 03/01/2020
Bài tiếp theo
mo doc file word c sharp

Mở và Đọc File Word Trong C# Với Microsoft Office Interop Word dll

doc file excel c sharp

Mở Đọc File Excel Trong C# Với Microsoft Office Interop Excel dll

windows 10 1909

Download Windows 10 Version 1909 Build 18363.418 Consumer Edition (ISO x64-x86)

write file word pdf c sharp

Cách tạo và ghi file Word, PDF trong C# với thư viện Spire.Doc, Spire.PDF

0 0 votes
Article Rating
Subscribe
Đăng nhập
Thông báo về
guest
guest
0 Comments
Inline Feedbacks
View all comments
  • Trending
  • Comments
  • Latest
Tải Và Cách Crack IDM 6.32

Tải Và Cách Crack IDM 6.35 Build 10 Vĩnh Viễn Mới Nhất 2019 – Không Báo Fake Serial [UPDATE]

27/11/2018 - Updated on 14/11/2019
IDM Full Toolkit - Crack IDM Tiện Lợi - Không Báo Fake Serial

IDM Full Toolkit – Crack IDM Tiện Lợi – Không Báo Fake Serial

10/08/2018 - Updated on 14/11/2019
Download DLC Boot 2019 v3.6 - Bộ Công Cụ Tạo USB Boot Đa Năng Cứu Hộ Máy Tính, PC

Download DLC Boot 2019 v3.6 – Bộ Công Cụ Tạo USB Boot Đa Năng Cứu Hộ Máy Tính, PC

15/04/2019 - Updated on 21/08/2019
Download Và Cách Crack Full IDM 6.33

Download Và Cách Crack Full IDM 6.35 Build 10 Vĩnh Viễn Mới Nhất 2019 – Không Báo Fake Serial [UPDATE]

07/05/2019 - Updated on 14/11/2019

Cách đổi trạng thái biểu tượng cảm xúc Angry thành “Dislike ” trên Facebook

124

Chia sẻ Khoá học Adobe InDesign CC – Hướng dẫn đầy đủ cho bạn về InDesign

32

Chia sẻ khóa học Cách giải khối Rubik 3×3 cho người mới bắt đầu

26

[UDEMY] Chia sẻ Khoá học 15 cách học tiếng anh – 15 Ways To Learn English

24
phuong thuc get post trong php

Bài 13: Phương thức GET và POST trong PHP

06/02/2020
chuoi string va cac ham xu ly trong php

Bài 12: Chuỗi (String) Và Các Hàm Xử Lý Chuỗi Trong PHP

25/01/2020
cac ham xu ly mang php

Bài 11: Các hàm xử lý mảng (Array) trong PHP

19/01/2020 - Updated on 21/01/2020
mang array trong php

Bài 10: Mảng (Array) Trong PHP

16/01/2020

Bài Viết Mới

phuong thuc get post trong php

Bài 13: Phương thức GET và POST trong PHP

06/02/2020
chuoi string va cac ham xu ly trong php

Bài 12: Chuỗi (String) Và Các Hàm Xử Lý Chuỗi Trong PHP

25/01/2020
cac ham xu ly mang php

Bài 11: Các hàm xử lý mảng (Array) trong PHP

19/01/2020 - Updated on 21/01/2020
mang array trong php

Bài 10: Mảng (Array) Trong PHP

16/01/2020
code web nam moi 2020

Share Code Đếm Ngược Chào Mừng Năm Mới 2020 Với Hiệu Ứng Tuyệt Đẹp

14/01/2020
ham function trong php

Bài 9: Hàm (Function) Trong PHP

14/01/2020

Mới Cập Nhật

phuong thuc get post trong php

Bài 13: Phương thức GET và POST trong PHP

06/02/2020
chuoi string va cac ham xu ly trong php

Bài 12: Chuỗi (String) Và Các Hàm Xử Lý Chuỗi Trong PHP

25/01/2020
cac kieu du lieu php

Bài 3: Những kiểu dữ liệu trong PHP

07/12/2019 - Updated on 25/01/2020
cac ham xu ly mang php

Bài 11: Các hàm xử lý mảng (Array) trong PHP

19/01/2020 - Updated on 21/01/2020
mang array trong php

Bài 10: Mảng (Array) Trong PHP

16/01/2020
code web nam moi 2020

Share Code Đếm Ngược Chào Mừng Năm Mới 2020 Với Hiệu Ứng Tuyệt Đẹp

14/01/2020

Tân Hồng IT là Trang Chia sẻ Kiến Thức, Tài Liệu, Khóa Học, Công Nghệ Thông Tin, Phần Mềm, Thủ Thuật, Tiện Ích Máy Tính

DMCA.com Protection Status

Donate – Xin Ủng Hộ Đóng Góp

DONATE
TanHongIT.Com | Hung1001 | LinuxTeamVN
  • About
  • Donate
  • Contact
  • Download File
  • Request
  • Other

© 2019 Facebook - Chia sẻ Kiến Thức, Công Nghệ Thông Tin , Phần Mềm, Thủ Thuật, Tiện Ích Máy Tính Tân Hồng IT.

No Result
View All Result
  • Home
    • Donate
    • Liên Hệ Tân Hồng IT
    • Yêu Cầu Phần Mềm, Thủ Thuật
    • Hướng dẫn tải File
  • Tài Liệu
  • Phần Mềm
  • Công cụ
  • Thủ Thuật
  • Download
  • Giải trí
  • Kiến thức

© 2019 Facebook - Chia sẻ Kiến Thức, Công Nghệ Thông Tin , Phần Mềm, Thủ Thuật, Tiện Ích Máy Tính Tân Hồng IT.

THÔNG BÁO: TanHongIT.Net sẽ sớm dừng cập nhật mọi bài viết và đã có một blog mới mới tại TanHongIT.ComĐi đến TanHongIT.Com
+ +
wpDiscuz
0
0
Would love your thoughts, please comment.x
()
x
| Đáp lại
This website uses cookies to improve your experience. We'll assume you're ok with this, but you can opt-out if you wish. Visit our Privacy and Cookie Policy.