4
Đảo ngược các chữ số của một số trong C/C++?
1
Trần Quốc Thắng10 đã đăng:

Xin chào mọi người, mình có một bài tập về cách đảo ngược chữ số của một số. Lưu ý ở đây là có thể đảo ngược cả số âmsố có chữ số 0 đứng sau cùng nữa nhé.

Ví dụ: -1230 đảo ngược thành -0321

Mình đã tìm trên mạng nhưng đa số các thuật toán không bao quát hết tất cả các trường hợp đặc biệt, bạn nào cách nào hiệu quả không?

thêm bình luận...
3
Tèo Em60 đã đăng:

Sử dụng cấu trúc dữ liệu string và đệ quy bạn có thể giải quyết được bài toán này.

Đoạn mã nguồn mẫu bạn có thể tham khảo

#include <stdio.h>
#include <string>
#include <iostream>
using namespace std;

string integerToString(int n) {
    // Xét nếu một số là số âm thì thêm ký tự dấu trừ đứng trước số đó
    string sign = n < 0 ? "-" : "";

    // Tách từng phần tử của dãy số và ép kiểu từng chữ số sang char
    string result = n > 0 ? string(1, (n % 10 + '0')) : string(1, ((n=-n) % 10 + '0'));

    // Sử dụng đệ quy để duyệt qua từng phần tử của dãy số
    (n /= 10) > 0 ? result=result + integerToString(n): result;

    return sign + result;
}

Trong hàm main truyền tham số với một số nguyên bất kỳ, lưu kết quả trả về

int main(){
    int a = -1230;
    string kq = integerToString(a);
    // Dùng cout trong C++ hoặc printf trong C nếu bạn muốn hiển thị lên kết quả
    cout << kq << endl; // C++
}

Nếu bạn chỉ muốn chuyển thành chuỗi thôi và vẫn giữ nguyên thứ tự chữ số thì thay đổi dòng:

(n /= 10) > 0 ? result=result + integerToString(n): result;

thành

(n /= 10) > 0 ? result=integerToString(n)+result: result;

Và một điều nữa là đảo ngược một số có số 0 ở cuối thì chỉ có cách duy nhất chuyển sang dạng chuỗi mới giữ được, nếu không số 0 sẽ bị mất nếu giữ nguyên kiểu dữ liệu số nguyên.

đã bổ sung 6.4 năm trước bởi
Avatar: B-Editor B-Editor0

C++ dùng biến tạm đc k ạ?

Cộng đồng 09.06.2020
thêm bình luận...
2
Member332920 đã đăng:

Theo ý kiến của mình thì ta có thể dùng kiểu string xét trường hợp số âm riêng rồi sử dụng thủ tục reverse() để đảo ngược chuỗi đã cho sau đấy sẽ thêm dấu trừ vào (nếu là số được xét là số âm).

Code của mình:

if (s[0] == '-') {
    kt = 1;
    s.erase(0, 1);
}

reverse(s.begin(), s.end());

if (kt == 1) {
    s = '-' + s;
}

Có gì sai xót mong các bạn chỉ giáo thêm.

đã bổ sung 5.6 năm trước bởi
Avatar: B-Editor B-Editor0

Ý tưởng của bạn khá rõ ràng, nhưng thường những câu hỏi dạng này nằm trong phần bài tập lập trình hơn là ở ngoài thực tế, đa số sẽ không được phép sử dụng thư viện, nếu sử dụng cách của bạn sẽ phải tự viết thêm một hoặc hai hàm chuyển đổi kiểu dữ liệu hoặc đảo ngược nữa.

Mà đoạn code tham khảo bạn đang sử dụng mã giả ư, nếu không thì nên thêm câu lệnh int kt = 0; ở dòng đầu tiên, bởi nếu điều kiện if ở dòng đầu mà không xảy ra thì biến kt sẽ không được khởi tạo, qua câu lệnh if thứ 2 sẽ bị lỗi.

xuans2huy 05.10.2018
thêm bình luận...
0
Cộng đồng đã đăng:

Bằng cách sử dụng vòng lặp while để lấy ra từng ký tự và so sánh chúng với nhau, chúng ta có thể tiến hành đảo ngược ký tự trong chuỗi C theo thứ tự trong bảng chữ cái.

Để so sánh các ký tự với nhau, chúng ta có thể sử dụng tới toán tử so sánh, hoặc là hàm strcmp() chẳng hạn.

Link tham khảo: Đảo ngược chuỗi trong C

thêm bình luận...
0
Cộng đồng đã đăng:

Bằng cách sử dụng vòng lặp while để lấy ra từng ký tự và so sánh chúng với nhau, chúng ta có thể tiến hành đảo ngược ký tự trong chuỗi C++ theo thứ tự trong bảng chữ cái. Link tham khảo: Tìm số đảo ngược trong C++

thêm bình luận...
Bạn đang thắc mắc? Ghi câu hỏi của bạn và đăng ở chế độ cộng đồng (?)