01/10/2018, 17:45

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?

rogp10 viết 19:55 ngày 01/10/2018

for (int i = 0; i < strlen(a); i++)

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

Trương Tấn Phát viết 19:54 ngày 01/10/2018
int count = -1;//bien dem s o ky tu
for (int i = 0; i < strlen(a); i++) {
   count++; 
}

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

Hung viết 19:54 ngày 01/10/2018
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);
}
Minh Trí viết 20:00 ngày 01/10/2018

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

Trương Tấn Phát viết 19:50 ngày 01/10/2018

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!?

rogp10 viết 19:56 ngày 01/10/2018

Thì bạn muốn tối ưu cơ mà đấ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) bởi vậy phải có một bước lọc.

Bài liên quan
0