30/09/2018, 17:52

Chia sẻ và học hỏi kinh nghiệm - Tìm số đối xứng

Dành cho các bạn đang học c++

#include<iostream>
using namespace std;
int sodoixung(int n)
{
	int k=0,m=n;
	while(m > 0)
	{
		k=k*10+m%10;
		m=m/10;
	}
	if(k==n)
	return 1;
	return 0;	
}
int main()
{
	int n;
	cout << "Nhap n = ";
	cin >> n;
	if(sodoixung(n))
	cout << n << " la so doi xung "<<endl;
	else
	cout << n << " khong phai la so doi xung" << endl;
	return 0;
}


Đăng Lê viết 19:52 ngày 30/09/2018

Tại sao mình lại không nghĩ ra ta? làm lúc trước làm bài số đối xứng này nè phải tách số ra từng phần tử rồi truyền vào mảng rồi mới kiểm tra đối xứng! Làm như bạn nhanh gọn lẹ ! tks về ý tưởng

Mai Anh Dũng viết 20:06 ngày 30/09/2018

Nếu số đối xứng là số có số lượng chữ số là chẵn thì mình có thể làm nhanh hơn. Trong vòng lặp while mình kiểm tra.

if ( m == k )
    return 1;
Đăng Lê viết 19:54 ngày 30/09/2018
#pragma warning(disable:4996)
#include<stdio.h>
#include<conio.h>
#define Size 100
void taoMang(int A[], int *m, int n);
int ktDoiXung(int A[], int m);

int main()
{
	int A[Size], m = 0;
	int n;
	printf("Nhap vao so n: ");
	scanf("%d", &n);
	taoMang(A, &m, n);
	//for (int i = 0; i < m; i++)
	//printf("%d", A[i]);
	int kq = ktDoiXung(A, m);
	if (kq == 1)
		printf("So doi xung");
	else
		printf("So KHONG doi xung");


	getch();
	return 0;
}
void taoMang(int A[], int *m, int n)
{
	int chuso = 0;
	int dem = 0;
	while (n != 0)
	{
		chuso = n % 10;
		n /= 10;
		A[dem] = chuso;
		dem++;
	}
	*m = dem;
}
int ktDoiXung(int A[], int m)
{
	int n = m / 2;
	int dem = 0;
	for (int i = 0; i < n; i++)
	{
		if (A[i] == A[m - 1 - i])
			dem++;
	}
	if (dem == n)
		return 1;
	else
		return 0;
}
Đăng Lê viết 20:03 ngày 30/09/2018

Tại hôm bữa e vừa đọc tài liệu mảng và con trỏ xong làm bài tập thấy bài số đối xứng lúc đó chỉ nghĩ tới mảng nên quyết định dùng mảng với con trỏ để làm! thấy cũng hay hay mà giờ mới biết nó dài dòng quá,

Phúc Nguyễn viết 20:00 ngày 30/09/2018

theo cách mình làm thì thế này, cho lưu số dưới dạng string ví dụ như biến st, cho i= 1, j=length(st). Sau đó while (st[i]=st[j]) and (i<j) do begin tăng i, giảm j. Cuối cùng xét nếu i<j thì không phải số đối xứng, còn i>=j thì đó là số đối xứng, độ phức tạp thì O(n/2) thui

rogp10 viết 19:54 ngày 30/09/2018

Có thể thêm n%10 == 0, nếu đúng thì false luôn. Lí do là số 0 không bao giờ đứng đầu.

Bài liên quan
0