Công cụ bảo vệ mã nguồn .NET mạnh nhất, không thể unpack, miễn phí cho các khách hàng đầu tiên đăng ký.
Trang 3 trên tổng số 4 Đầu tiênĐầu tiên 1234 Cuối cùngCuối cùng
Từ 21 tới 30 trên tổng số 33 kết quả

Đề tài: tìm chữ số lớn nhất của một số nguyên

  1. #21
    Ngày gia nhập
    07 2011
    Bài viết
    468

    Mặc định tìm chữ số lớn nhất của một số nguyên

    gió to đây :V

    C++ Code:
    1. #include <boost/range/adaptor/filtered.hpp>
    2. #include <boost/range/algorithm/max_element.hpp>
    3. #include <cctype>
    4. #include <iostream>
    5. #include <string>
    6.  
    7. char maxDigit(const std::string& s)
    8. {
    9.     using namespace boost::adaptors;
    10.     return *boost::max_element(
    11.         s | filtered([](unsigned char c) { return std::isdigit(c); }));
    12. }
    13.  
    14. int main()
    15. {
    16.     std::string s;
    17.     std::cin >> s;
    18.     std::cout << maxDigit(s) << "\n";
    19. }

    to hơn tí nữa :V

    C++ Code:
    1. #include <range/v3/core.hpp>
    2. // keep range-v3 core up top
    3. #include <cctype>
    4. #include <iostream>
    5. #include <range/v3/algorithm/max.hpp>
    6. #include <range/v3/view/filter.hpp>
    7. #include <string>
    8.  
    9. char maxDigit(const std::string& s)
    10. {
    11.     return ranges::max(s | ranges::view::filter([](unsigned char c) {
    12.                            return std::isdigit(c);
    13.                        }));
    14. }
    15.  
    16. int main()
    17. {
    18.     std::string s;
    19.     std::cin >> s;
    20.     std::cout << maxDigit(s) << "\n";
    21. }
    Công cụ bảo vệ mã nguồn .NET mạnh nhất hiện tại, miễn phí cho các khách hàng đầu tiên đăng ký.

  2. #22
    Ngày gia nhập
    02 2016
    Bài viết
    305

    Trích dẫn Nguyên bản được gửi bởi akatsuki Xem bài viết
    anh code kiểu dùng chuỗi giúp em dc ko ạ
    em mới code nên chưa biết làm
    Đề bài của bạn chỉ bảo xét lấy chữ số lớn nhất chứ không phải nhập xuất. Như vậy tôi chỉ giải cho cách xét.
    Chú thích: khi xuất, bạn nên xuất luôn số chính, chứ chỉ xuất chữ số tìm được thì hơi bất lịch sự.
    Thay vì: "chữ số lớn nhất là 7"
    Thì: "chữ số lớn nhất trong con số 12357644 là 7"

    Có nhiều cách để giải. Nhưng đây là bài tập nên có lẽ Thầy/Cô muốn bạn phải code thay vì gọi hàm thư viện.

    C++ cho phép viết hàm chồng cho nên có thể dùng mọt bộ hàm trùng tên nhau. Nếu code C thuần túy thì cần code kiểu con trỏ void.

    // hàm tìm chứ số lớn nhất trong 1 chuỗi, trả về trị int
    int CSToNhat(char *s)
    {
    char to = '0';
    while (*s)
    {
    if (*s < '0' || *s > '9') return -1; // chuỗi số không hợp lệ
    if (*s > to) to = *s;
    if (*s == '9') break; // lớn nhất rồi, không cần duyệt tiếp
    }
    return (*s - '0');
    }

    int CSToNhat(long x) // hay muốn long long gì đó tùy theo hứng
    {
    // có hai cách làm, một là gọi hàm để đổi nó ra chuỗi rồi gọi hàm trên

    // cách thứ hai dùng phép chia 10 từ từ
    }

    int CSToNhat(int x)
    {
    // cast x ra long (hay long long gì đó) rồi gọi hàm trên
    }

    int CSToNhat(double x)
    {
    // hàm này tốt hơn hết là đổi nó thành chuỗi ròi gọi hàm chuỗi ở trên
    }
    Đã được chỉnh sửa lần cuối bởi NguNhuheo : 03-10-2018 lúc 09:43 AM.

  3. #23
    Ngày gia nhập
    08 2017
    Bài viết
    3,360

    Thích thì tham khảo:
    Java Code:
    1. import java.math.BigInteger;
    2. import java.util.Scanner;
    3.  
    4. public class MaxDigit {
    5.     // Driver method
    6.     public static void main(String args[]) throws Exception
    7.     {
    8.         System.out.print("Search maxDigit in number(integer), Input number = ");
    9.         Scanner sc = new Scanner(System.in);
    10.         String input = sc.nextLine();
    11.         BigInteger bi = new BigInteger(input);
    12.         //BigInteger bi = sc.nextBigInteger(); //tràn số khi nhập số lớn
    13.         //
    14.         BigInteger kq = BigInteger.ZERO, ten = BigInteger.TEN, aMod;
    15.        
    16.         if (bi.compareTo(BigInteger.ZERO) == -1)
    17.             bi = bi.abs();     
    18.         //System.out.println("echo, a = " + bi);
    19.         while (bi.compareTo(BigInteger.ZERO) != 0) { //bi != 0
    20.             aMod = bi.mod(ten); //result is 0 .. 9
    21.             if(kq.compareTo(aMod) == -1) kq = aMod; //kq < aMod
    22.             bi = bi.divide(ten);
    23.         }
    24.        
    25.         System.out.println("Result is " + kq);
    26.     }
    27. }



    Tài liệu sử dụng:
    https://docs.oracle.com/javase/7/docs/api/java/math/BigInteger.html#BigInteger(java.lang.String)

  4. #24
    Ngày gia nhập
    07 2011
    Bài viết
    468

    sao lại tha rác bên Java về box C++ thế này?

    > bi.compareTo(BigInteger.ZERO) == -1
    > bi.mod(ten)
    > bi.divide(ten)

    rác rưởi quá, ko có quá tải toán tử so sánh hay cộng trừ nhân chia

    khỏi xài `int` nữa:
    C++ Code:
    1. #include <boost/multiprecision/gmp.hpp>
    2. #include <iostream>
    3. #include <stdexcept>
    4.  
    5. using BigInt = boost::multiprecision::mpz_int;
    6.  
    7. int main()
    8. {
    9.     try
    10.     {
    11.         BigInt n;
    12.         std::cin >> n;
    13.         if (n < 0)
    14.             n *= -1;
    15.         BigInt maxDigit = 0;
    16.         for (; n; n /= 10)
    17.             if (maxDigit < n % 10)
    18.                 maxDigit = n % 10;
    19.         std::cout << maxDigit << "\n";
    20.     }
    21.     catch (const std::exception& e)
    22.     {
    23.         std::cout << e.what() << "\n";
    24.         return 1;
    25.     }
    26. }

    xài với hàm thư viện chuẩn std::max: phải cast tường minh n % 10 thành BigInt
    C++ Code:
    1. #include <algorithm>
    2. #include <boost/multiprecision/gmp.hpp>
    3. #include <iostream>
    4. #include <stdexcept>
    5.  
    6. using BigInt = boost::multiprecision::mpz_int;
    7.  
    8. int main()
    9. {
    10.     try
    11.     {
    12.         BigInt n;
    13.         std::cin >> n;
    14.         if (n < 0)
    15.             n *= -1;
    16.         BigInt maxDigit = 0;
    17.         for (; n; n /= 10)
    18.             maxDigit = std::max(BigInt{n % 10}, maxDigit);
    19.         std::cout << maxDigit << "\n";
    20.     }
    21.     catch (const std::exception& e)
    22.     {
    23.         std::cout << e.what() << "\n";
    24.         return 1;
    25.     }
    26. }

    chuyển BigInt thành int: phải using namespace boost::multiprecision hoặc xài convert_to
    C++ Code:
    1. #include <algorithm>
    2. #include <boost/multiprecision/gmp.hpp>
    3. #include <iostream>
    4. #include <stdexcept>
    5.  
    6. using BigInt = boost::multiprecision::mpz_int;
    7.  
    8. int main()
    9. {
    10.     try
    11.     {
    12.         BigInt n;
    13.         std::cin >> n;
    14.         if (n < 0)
    15.             n *= -1;
    16.         int maxDigit = 0;
    17.         for (; n; n /= 10)
    18.         {
    19.             using namespace boost::multiprecision;
    20.             maxDigit = std::max(static_cast<int>(n % 10), maxDigit);
    21.         }
    22.         std::cout << maxDigit << "\n";
    23.     }
    24.     catch (const std::exception& e)
    25.     {
    26.         std::cout << e.what() << "\n";
    27.         return 1;
    28.     }
    29. }

    edit: thêm cái bắt lỗi đàng hoàng, C++ cin >> nó khá dễ dãi
    C++ Code:
    1. #include <algorithm>
    2. #include <boost/multiprecision/gmp.hpp>
    3. #include <iostream>
    4. #include <stdexcept>
    5. #include <string>
    6.  
    7. using BigInt = boost::multiprecision::mpz_int;
    8.  
    9. int main()
    10. {
    11.     try
    12.     {
    13.         std::string arg;
    14.         std::cin >> arg;
    15.         BigInt n{arg};
    16.         if (n < 0)
    17.             n *= -1;
    18.         int maxDigit = 0;
    19.         for (; n; n /= 10)
    20.         {
    21.             using namespace boost::multiprecision;
    22.             maxDigit = std::max(static_cast<int>(n % 10), maxDigit);
    23.         }
    24.         std::cout << maxDigit << "\n";
    25.     }
    26.     catch (const std::exception& e)
    27.     {
    28.         std::cout << e.what() << "\n";
    29.         return 1;
    30.     }
    31. }

    Click vào hình ảnh để lấy hình ảnh lớn

Tên:		Untitled.png
Lần xem:	3
Size:		18.7 KB
ID:		65040
    Đã được chỉnh sửa lần cuối bởi INTP : 03-10-2018 lúc 08:18 PM.

  5. #25
    Ngày gia nhập
    08 2017
    Bài viết
    3,360

    java là rác à ? nó là data type built-in.
    c# gần với toán học hơn, chịu không ?

  6. #26
    Ngày gia nhập
    07 2011
    Bài viết
    468

    Mặc định tìm chữ số lớn nhất của một số nguyên

    box nào ra code đó, C++ mà đi phang Java rồi C# là sao? Ko biết xài C++ thì đừng có lên tiếng nữa. Có thấy ai phang code C/C++ vào box Java đâu?

  7. #27
    Ngày gia nhập
    08 2017
    Bài viết
    3,360

    Cần thì chơi c standard cũng OK

  8. #28
    Ngày gia nhập
    07 2011
    Bài viết
    468

    Trích dẫn Nguyên bản được gửi bởi Monre Xem bài viết
    Cần thì chơi c standard cũng OK
    vậy thì xin mời, tha hồ mà khổ dâm với C nha. Nhớ xài gmp chạy cho lẹ, có thêm bắt lỗi nữa, chuỗi nhập vào có độ dài bất kì nha ko chơi buffer có kích thước cố định.

  9. #29
    Ngày gia nhập
    08 2017
    Bài viết
    3,360

    Khác nhau là ở tầm nhìn thôi.

  10. #30
    Ngày gia nhập
    02 2016
    Bài viết
    305

    Trời. Cái này là "dao to bứa lớn" vẫn còn chưa diễn tả hết.
    Phải nói là hạt nhân nguyên tử và phi thuyền lên Hỏa tinh.
    Công cụ bảo vệ mã nguồn .NET mạnh nhất hiện tại, miễn phí cho các khách hàng đầu tiên đăng ký.

Tags của đề tài này

Quyền hạn của bạn

  • Bạn không thể gửi đề tài mới
  • Bạn không thể gửi bài trả lời
  • Bạn không thể gửi các đính kèm
  • Bạn không thể chỉnh sửa bài viết của bạn