Tối ưu thuật toán số thuận nghịch

#include<iostream>

using namespace std;

int main()
{
	char a[100];//chuoi
	cout << "enter a number with the number of digit is odd: ";
	cin >> a;
	int count = -1;//bien dem s o ky tu
	for (int i = 0; i < strlen(a); i++)
	{
		count++;
	}
	//cout << count;
	int k;
	k = (count - 2) / 2;
	int m = 0,couting=0;
	while (m != (k+1))
	{
		if (a[m] == a[count - m])
			couting++;//bien dem
	m++;
	}
	if (couting == (k+1))
		cout << a << " is Reversible number." << endl;//so nghich dao
	else
		cout << a << " is not Reversible number." << endl;
	system("pause");
	return 0;
}

mình có suy nghĩ ra cách làm tìm n có phải số thuận nghịch không vd 33533 là số thuận nghịch. không biết có cách nào hay và tối ưu hơn không?

Chuỗi C kết thúc bằng ‘\0’, strlen cũng dựa trên cái này thôi.
Nếu bạn làm kiểu chuỗi đối xứng thì nên cho một index trái và một index phải, rồi để chúng gặp nhau sẽ hay hơn. Và còn một bước nữa phải làm trước hết :slight_smile:

4 Likes

Đoạn rất rất rất không tối ưu rồi. :smiling_imp:

4 Likes
int number_reverse(int num)
{
  int rev_num = 0;
  while (num > 0) {
    rev_num = rev_num * 10 + num % 10;
    num /= 10;
  }
  return rev_num;
}

bool is_reversible(int n)
{
  if (n < 0) n = -n;
  return n == number_reverse(n);
}
4 Likes

:)) tại sao vậy bạn , mình mới học , đoạn đó để đếm số ký tự ấy

Hàm strlen() đã trả về độ dài (số kí tự) của chuỗi rồi, việc gì tính toán thêm nữa!?

3 Likes

Thì bạn muốn tối ưu cơ mà :smiley: đấy, strlen cũng chỉ duyệt đến ‘\0’ mà thôi.

Để cho đúng thì không thể chỉ lấy strlen() mà được (lưu ý là số nhé, không phải chuỗi) :smiley: bởi vậy phải có một bước lọc.

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