【问题标题】:Palindrome Function回文函数
【发布时间】:2013-03-13 20:18:00
【问题描述】:

我需要重写程序以使用函数 isPalindrome。它需要输入一个 5 位整数并返回一个布尔值(如果是回文则返回 true,否则返回 false),并且不能包含任何 cout 语句。我不确定如果没有 cout 函数我将如何做到这一点。这是我的代码:

#include <iostream>

using namespace std;

int main()
{
    int number, digit1, digit2, digit3, digit4, digit5;

    cout << "\nEnter a 5-digit integer: ";
    cin >> number;

//Break down input number into individual digits:
    digit1 = number / 10000;
    digit2 = number % 10000 / 1000;
    digit3 = number % 10000 / 100;
    digit4 = number % 10000 / 10;
    digit5 = number % 10;

    if ( digit1 == digit5 && digit2 == digit4 )
        cout << number <<" is a palindrome.\n";
             else
             cout << number << " is not a palindrome.\n";
             return 0;
         }
int isPalindrome ()
{

}

【问题讨论】:

  • 提示:isPalindrome 应该有一个 bool 根据您的要求返回类型。您需要在函数中使用return 语句代替cout
  • isPalindrome 也需要输入参数 - 你必须将数据传递给它。
  • 我不知道如何重写它,我是否保持主要功能不变,只在 ispalindrome 中使用布尔值?
  • 你知道你会如何使用这个函数吗? (不是它的作用,只是你在哪里以及如何使用它)
  • 提示:如果您要将数字视为字符串,则没有理由将其读取为数字。

标签: c++ palindrome


【解决方案1】:

这应该可以帮助您入门(不会破坏太多乐趣)

int main(){
    //accept integer input using cin
    if(isPalindrome(input))
       cout << "yaay!";
    else
       cout << "nooouuu!";

}

bool isPalindrome (int input)
{
   //test things here
   return ( digit1 == digit5 && digit2 == digit4 ) 
   // ^ returns true if condition satisfied
}

此外,您分离数字的方式不正确。应该是:

digit1 = number/10000 % 10;
digit2 = number/1000 % 10;
digit3 = number/100 % 10;
digit4 = number/10 % 10;
digit5 = number % 10;

当然,上面其实应该是循环的。

【讨论】:

    【解决方案2】:

    不必指定数字包含多少位数字。你可以试试这样的:

        bool isPalindrome(int number) {
            int reverse = 0, copy = number;
            while(copy != 0) {
                reverse = reverse*10 + copy%10;
                copy /= 10;
            }
            return number == reverse;
        }
    

    【讨论】:

      【解决方案3】:
      string s;
          cout<<"\nEnter a string : " ;
          cin>>s;
          int length = s.length();
      
          char* arr = new char();
      
          int k = length;
      
          for(int i = 0 ; i <= length ; i++)
          {
              arr[i] = s[k];
              k -= 1;
          }
      
          if(!palindrome(s, arr, length))
          {
              cout<<"\nNot Palindrome\n";
          }
      
          else
          {
              cout<<"\nPalindrome\n";
          }
      }
      
      bool palindrome(string& s, char* arr, int length)
      {
          int j = 0;
          for(int i = 1 ; i <= length; i++)
          {
              if(arr[i]!= s[j])
              {
                  return false;
              }
              j++;
          }
          return true;
      }
      

      【讨论】:

        猜你喜欢
        • 2017-02-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-11-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多