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


4 Likes

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

2 Likes

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;
2 Likes
#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;
}

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á, :sweat_smile:

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

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.

1 Like
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?