Kiểm tra số đối xứng trong C/C++

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.

Số đối xứng

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:

  1. Số có 1 chữ số là số đối xứng
  2. 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ó Thể Bạn Quan Tâm :   Khái niệm công việc liên quan trong ngành HR

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.

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:

  1. Cách thứ hai khả thi ngay cả khi số bạn nhập có hàng triệu chữ số.
  2. Xét về tốc độ, cả hai cách đều có cùng độ phức tạp tuyến tính.
Có Thể Bạn Quan Tâm :   Xá bấu là gì? Cách làm xá bấu và nấu thành các món ngon giản dị

Đề 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++

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ố
Có Thể Bạn Quan Tâm :   CAD LÀ GÌ?

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); } }

Back to top button