Cho e hỏi cách chuyển đổi từ xâu sang số ạ!
Hỏi cách chuyển xâu sang số
Đề là cho 2 số sao input lại có đến 3 số vậy :v
À e quên,cái số đầu tiên là số lượng bộ test
10^250… Cái số to vãi linh hồn này thì phải dùng bigInteger để xử lý nó. Bác tham khảo link full hd không che sau:
https://codeforces.com/blog/entry/16380
Khi đã biểu diễn được số siêu to khổng lồ đó và có các phương thức tính toán với nó thì việc tìm ước chung thực hiện như bình thường nha bác.
Còn tuỳ vào ngôn ngữ bạn sử dụng nữa.
Bài này nhẹ nhàng vì a vẫn không quá 64 bit b lấy cơ số 10^6 là được.
Bài này phân tích một chút sẽ ra vầy:
UCLN(a, b) = UCLN(a, b%a)
Mà a
là số nhỏ rồi, nên chỉ cần tính b%a
là xong.
Nhận xét thêm một chút: (10x+y)%n = (10x%n + y%n)%n
, nên có thể đọc b
lần lượt từng ký tự để tính b%a
em thử #include <boost/multiprecision/cpp_int.hpp>
xem có được ko
c++ users can use <boost/multiprecision/cpp_int.hpp>
spoj supports it
bài này ở spoj https://www.spoj.com/PTIT/problems/CPPLCM04/ xài cpp_int vô tư thôi em
em có thể ăn gian xài luôn gcd của boost :V
#include <iostream>
#include <boost/multiprecision/cpp_int.hpp>
#include <boost/math/common_factor.hpp>
using BigInt = boost::multiprecision::cpp_int;
int main() {
int n;
std::cin >> n;
for (BigInt a, b; std::cin >> a >> b; )
std::cout << boost::math::gcd(a, b) << "\n";
}
Cái thư viện này phải cài đặt riêng chứ không có sẵn trong IDE phải không bạn ?
đúng rồi. 1 số trình biên dịch có đi kèm sẵn Boost luôn, ví dụ https://nuwen.net/mingw.html
hoặc em vào https://www.boost.org/ down bản mới nhất về rồi làm theo “hướng dẫn”: https://www.boost.org/doc/libs/1_72_0/more/getting_started/windows.html là được :V
nếu em xài Linux gì thì cứ sudo apt install boost-devel
hoặc em xài MSVC 2015 trở lên thì xài vcpkg để quản lý các thư viện
nếu em ko xài MSVC thì cài msys2 mingw thay cho trình biên dịch em đang xài :V
ngoài ra còn có conan gì đó nữa