Phát hiện số đối xứng trong C++ là một bài toán căn bản giúp người học lập trình C++ hiểu về lập trình. Một số được gọi là số đối xứng nếu khi đọc từ trái qua phải (như cách đọc thông thường) và từ phải qua trái đều có giá trị như nhau.
Ví dụ về số đối xứng là 1, 2, 3, 11, 121, 4994, …
Phân tích bài toán
Dựa theo định nghĩa số đối xứng trên, chúng ta có thể suy ra các nhận định sau:
- Số có 1 chữ số là số đối xứng
- Số có số lượng chữ số lẻ sẽ đối xứng qua số ở chính giữa. Vì vậy, khi kiểm tra, ta có thể bỏ qua số chính giữa
Có nhiều cách khác nhau để kiểm tra số đối xứng.
Cách 1: Chứng minh sử dụng định nghĩa
Đảo ngược số ban đầu, kiểm tra xem số đảo ngược có bằng số ban đầu hay không.
Xem thêm : Sale tài chính là gì? Mô tả chi tiết công việc và kỹ năng cần có
Trong cách này, ta sử dụng toán tử chia nguyên / và chia dư % để thực hiện tính toán.
Phụ thuộc vào cách này, chúng ta sẽ cung cấp code ở phần tiếp theo.
Cách 2:
Xem số cần kiểm tra như một chuỗi kiểu char[] hoặc kiểu string. Vì vậy, ta cần kiểm tra từng ký tự ở nửa đầu có giống từng ký tự ở nửa cuối hay không?
Gọi n là chiều dài của chuỗi s.
Cho i < n/2, kiểm tra nếu tồn tại s[i] != s[n-i-1] thì số đó không phải là số đối xứng. Nếu không tồn tại, số đó là số đối xứng.
Nhận xét:
- Cách thứ hai khả thi ngay cả khi số bạn nhập có hàng triệu chữ số.
- Xét về tốc độ, cả hai cách đều có cùng độ phức tạp tuyến tính.
Đề tài được gợi ý: Cách tìm ước chung lớn nhất
Mã kiểm tra số đối xứng C/C++
Xem thêm : Tìm hiểu CoinEx là gì? Tổng quan và Hướng dẫn sử dụng sàn giao dịch CoinEx
Mã dưới đây triển khai cách thứ nhất.
#include<stdio.h> #include <iostream> using namespace std; int main(){ int num, r, sum=0, temp; cout << “Nhập một số: “; cin >> num; for(temp=num; num!=0; num=num/10){ r=num%10; sum=sum*10+r; } if(temp==sum) cout << temp << ” là số đối xứng”; else cout << temp << ” không là số đối xứng”; return 0; }
Đầu ra:
Nhập một số: 25 25 không là số đối xứng Nhập một số: 1991 1991 là số đối xứng
Chúc bạn học tốt!
Đối với cách thứ hai (cá nhân mình đánh giá tốt hơn), bạn cần viết một hàm được sử dụng để kiểm tra xem số người dùng nhập vào có phải là số không, bao gồm:
- Chiều dài (số lượng ký tự) phải là số dương
- Số đầu tiên khác số 0
- Tất cả các ký tự phải là số
Lời giải mẫu:
#include <stdio.h> #include <string.h> // Hàm kiểm tra chuỗi có phải là dãy số không bool IsNumber(char s[], int n){ if(n == 0) return false; if(s[0] == ‘0’) return false; for(int i = 0; i < n; i++) s[i] > ‘9’) return false; return true; } int main(){ char s[100]; gets(s); int n = strlen(s); // Nếu không phải là dãy số, thoát chương trình if(IsNumber(s, n) == false){ printf(“nBạn đã nhập sai định dạng!”); return 0; } bool isPar = true; int i = 0, j = n – 1; while(i < j){ if(s[i] != s[j]){ isPar = false; break; }else{ ++i; // Tăng đầu -j; // Giảm cuối } } if(isPar == true){ printf(“%s là số đối xứng!”, s); }else{ printf(“%s không là số đối xứng!”, s); } }