Thứ Ba, 1 tháng 12, 2015

Bài 32: Cho số nguyên dương n. Kiểm tra xem n có phải là số chính phương hay không

(Wiki) Số chính phương hay còn gọi là số hình vuông là số tự nhiên có căn bậc 2 là một số tự nhiên, hay nói cách khác, số chính phương là bình phương (lũy thừa bậc 2) của một số tự nhiên khác.
     Ví dụ:
4 = 2²  
9 = 3²
1.000.000 = 1.000²



Vậy trong C thì sao:

ex: n = 4: 4 = sqrt(4) * sqrt(4)
hay
sqrt((float)4) <== là số thực = (int)sqrt((float)n)
        2.00000                         =                          2 
hay 
gán i = sqrt(n): i * i = n hoặc pow(sqrt(n), 2) = n
Sau đây là 1 số đoạn code cho những ý tưởng trên:

 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
#include<stdio.h>
#include<conio.h>
#include<math.h>
int main()
{
 int i, n;
 do
 {
 printf("\nNhap n: ");
 scanf("%d", &n);

    if(n <= 0)
     printf("\nn phai > 0. Xin nhap lai !");

 }while(n <= 0);
 /*Số chính phương là số mà kết quả khai căn bậc 2 là 1 số nguyên
 sqrt(4) = 2.00000 => ép về nguyên = 2 => vì 2.000  == 2 (true) => là số chính phương
 sqrt(5) = 2.23234 => ép về nguyên = 2 => vì 2.4324 != 2 (false) => không là số chính phương*/
 if (n == sqrt((float)n) * sqrt((float)n))  // So sánh 2 số khi chưa ép về kiểu nguyên và số đã ép về kiểu nguyên
 {
  printf("\n%d La so chinh phuong", n);
 }
 else
 {
  printf("\n%d Khong la so chinh phuong", n);
 }

 getch();
 return 0;
}

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
//1. n là số nhập vào
//2. i = căn bậc hai của n
//3. nếu i * i = n => chính phương
//VD: 9 = 3^2 

#include <stdio.h>
#include <conio.h>
#include <math.h>
  
int main()
{
 double  n;
    double i;
    printf ("Nhap so nguyen duong n: ");
    scanf("%d", &n);
    i = sqrt(n);
    if (n == i*i)
        printf ("La so chinh phuong!");
    else
        printf ("Khong la so chinh phuong!");
    getch();
    return 0;
}
004