21xrx.com
2024-11-22 07:12:29 Friday
登录
文章检索 我的文章 写文章
C++判断回文数并输出位数(地址传递方式实现)
2023-07-05 08:56:32 深夜i     --     --
C++ 回文数 输出位数 地址传递方式

回文数是指正着读和倒着读都相同的数,比如121、12321等。在C++中,我们可以通过一个函数来判断一个数是否为回文数,并输出这个数的位数。本文将介绍如何使用地址传递方式实现这个功能。

首先,我们需要定义一个函数来判断一个整数是否为回文数。这个函数的原型如下:

bool isPalindrome(int n);

其中,n为要判断的整数,函数的返回值为true表示n是回文数,否则返回false。接下来,我们来实现这个函数。

首先,我们需要先将n转换成一个字符串,这样才能方便地进行位数和回文数的判断。在转换成字符串的过程中,我们需要用到C++中的字符串流stringstream,代码如下:

stringstream ss;

ss << n;

string str = ss.str();

在转换成字符串之后,我们可以使用头尾指针的方式来判断这个数是否为回文数。具体实现如下:

bool isPalindrome(int n){

  stringstream ss;

  ss << n;

  string str = ss.str();

  int len = str.size(); //字符串长度

  int i = 0, j = len - 1; //头尾指针

  while(i < j){

    if(str[i] != str[j])则不是回文数

      return false;

    i++;

    j--;

  }

  return true;

}

接下来,我们可以在函数内部统计并输出这个数的位数。这里我们使用地址传递的方式来输出位数。代码如下:

void getDigits(int n, int* digits){

  int count = 0;

  while(n != 0){

    digits[count] = n % 10;

    n /= 10;

    count++;

  }

  *digits = count; //将位数存放在digits[0]中

}

最后,我们可以将这个判断回文数和输出位数的功能组合起来,得到下面的完整代码:

#include

#include

using namespace std;

bool isPalindrome(int n);

void getDigits(int n, int* digits);

int main(){

  int n;

  cout << "请输入一个整数:";

  cin >> n;

  if(isPalindrome(n)){

    cout << n << "是回文数,共有" << endl;

    int digits[10];

    getDigits(n, digits);

    cout << digits[0] << "位" << endl;

  }else

    cout << n << "不是回文数" << endl;

  return 0;

}

bool isPalindrome(int n){

  stringstream ss;

  ss << n;

  string str = ss.str();

  int len = str.size(); //字符串长度

  int i = 0, j = len - 1; //头尾指针

  while(i < j){

    if(str[i] != str[j]) //如果不相等

    i++;

    j--;

  }

  return true;

}

void getDigits(int n, int* digits){

  int count = 0;

  while(n != 0){

    digits[count] = n % 10;

    n /= 10;

    count++;

  }

  *digits = count; //将位数存放在digits[0]中

}

通过以上代码,我们可以使用地址传递方式实现判断回文数并输出位数的功能。在实际编程中,我们也可以把输出位数的功能移到main函数中,这样可以提高代码的可读性。

  
  

评论区

{{item['qq_nickname']}}
()
回复
回复