Làm sao để kiểm tra số chính phương trong C/C++? Bài viết này sẽ giúp các bạn viết hàm kiểm tra một số có phải số chính phương hay không. Tiếp đến là hướng dẫn tìm các số chính phương trong mảng sử dụng C/C++. Nhưng trước hết, chúng ta cũng cần trình bày về bài toán và số chính phương cho các bạn chưa biết.
1. Bài toán kiểm tra số chính phương
Bài toán 1: Hãy viết chương trình nhập vào số nguyên dương n. Kiểm tra xem n có phải là số chính phương hay không? (số chính phương là số khi lấy căn bặc 2 có kết quả là nguyên). Hãy viết chương trình kiểm tra số chính phương sử dụng ngôn ngữ C/C++
Bài toán 2: Viết chương trình nhập vào một mảng số nguyên có n phần tử. Hãy tìm và in ra màn hình các số chính phương có trong mảng. Hãy viết chương trình tìm các số chính phương trong mảng sử dụng ngôn ngữ lập trình C/C++
Kiểm tra số chính phương là 1 trong những bài tập lập trình C/C++ phổ biến trong các môn học lập trình cơ bản. Để kiểm tra một số có là số chính phương hay không. Chúng ta có một vài cách để giải quyết:
- Lặp
i
chạy từ0
đến khii*i > n
. Nếui*i == n
tức n là số chính phương, kết thúc chương trình. Nếui*i > n
thì kết luận n không phải số chính phương - Kiểm tra kết quả của căn bậc 2 của n có phải số nguyên không. Đây là cách tối ưu hơn.
2. Code kiểm tra số chính phương C/C++
Nếu ta sử dụng vòng lặp(cách 1) ở trên, chúng ta sẽ code như sau:
Code bằng ngôn ngữ C:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
#include <stdio.h> int main(){ int n; printf("\nNhap n = "); scanf("%d", &n); int i = 0; while(i*i <= n){ if(i*i == n){ printf("%d la so chinh phuong!\n", n); return 0; } ++i; } printf("%d khong phai so chinh phuong!\n", n); } |
Code bằng ngôn ngữ C++:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
#include <iostream> using namespace std; int main(){ int n; cout << "\nNhap n = "; cin >> n; int i = 0; while(i*i <= n){ if(i*i == n){ cout << n << " la so chinh phuong!\n"; return 0; } ++i; } cout << n << " khong phai so chinh phuong!\n"; } |
Output:
1 2 |
Nhap n = 4 4 la so chinh phuong! |
Với cách kiểm tra kết quả của phép khai căn của n có là số nguyên không. Chúng ta sẽ sử dụng hàm sqrt
trong thư viện math.h
. Đồng thời, sử dụng kỹ thuật ép kiểu để thực hiện.
Code kiểm tra chính phương viết bằng C:
1 2 3 4 5 6 7 8 9 10 11 12 13 |
#include <stdio.h> #include <math.h> int main(){ int n; printf("\nNhap n = "); scanf("%d", &n); int sqr = sqrt(n); if(sqr*sqr == n){ printf("%d la so chinh phuong!\n", n); }else{ printf("%d khong phai so chinh phuong!\n", n); } } |
Code kiểm tra số chính phương C++:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
#include <iostream> #include <math.h> using namespace std; int main(){ int n; cout << "\nNhap n = "; cin >> n; int sqr = sqrt(n); if(sqr*sqr == n){ cout << n << " la so chinh phuong!\n"; } else { cout << n << " khong phai so chinh phuong!\n"; } } |
Output:
1 2 |
Nhap n = 8 8 khong phai so chinh phuong! |
3. Tìm các số chính phương có trong mảng
Để in ra các số chính phương có trong mảng, bạn cần kiểm tra lần lượt từng phần tử có phải số chính phương không. Nếu là số chính phương thì in ra thôi.
Sau đây là code tìm và in ra các số chính phương có trong mảng 1 chiều. Các bạn có thể tham khảo:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 |
#include <iostream> #include <math.h> using namespace std; bool scp(int n){ int sqr = sqrt(n); return (sqr*sqr == n); } int main(){ int n; do{ cout << "\nNhap n = "; cin >> n; }while(n <= 0); int a[n]; for(int i = 0;i < n;i++) cin >> a[i]; cout << "\nCac so chinh phuong:\n"; for(int i = 0;i < n; i++){ if(scp(a[i])){ cout << a[i] << " "; // Neu muon in chi so cua cac so chinh phuong, bo comment dong duoi day // cout << i << "\n"; } } } |
Ouput:
1 2 3 4 5 |
Nhap n = 5 1 2 4 9 8 Cac so chinh phuong: 1 4 9 |
4. Kết luận
Như vậy, Nguyễn Văn Hiếu Blog đã giúp các bạn tìm ra lời giải cho bài toán kiểm tra số chính phương. Cách để in ra các số chính phương có trong mảng. Hi vọng bài viết đem lại những chia sẻ hữu ích cho các bạn.