首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用check函数查找给定范围内的所有回文编号

使用check函数查找给定范围内的所有回文编号
EN

Stack Overflow用户
提问于 2015-01-08 22:46:54
回答 2查看 1.9K关注 0票数 1

我试图使用一个check函数在给定的限号下找到所有回文数字。

这是我的密码:

代码语言:javascript
复制
#include<iostream>
using namespace std;

int checkPalindrom(int);
int main(){
    int num,sum;
    int lim;

    cout << "Insert limit number: ";
    cin >>  lim;

    cout << "Palindrome numbers within the limit are: ";
    for(num>0;num<=lim;num++){
        sum=checkPalindrom(num);
        if(num==sum)
            cout << num << " ";
    }
    return 0;
}

int checkPalindrom(int num){
    int sum=0,r;
    if (num){
        r=num%10;
        sum=sum*10+r;
        checkPalindrom(num/10);
    }
    return sum;
}

这里的结果是回文数到9为止,尽管有2位数< number

提前感谢您的回答!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-01-08 22:51:32

改变这个

代码语言:javascript
复制
for(num>0;num<=lim;num++)

到这个

代码语言:javascript
复制
for(num=0;num<=lim;num++)

以初始化num

那么实际上你需要做更多的改变。这应该是可行的:

代码语言:javascript
复制
#include<iostream>
using namespace std;

bool checkPalindrom(int);
int main() {
  int num;
  int lim;

  cout << "Insert limit number: ";
  cin >> lim;

  cout << "Palindrome numbers within the limit are: ";
  for (num = 0; num <= lim; num++) {
    if (checkPalindrom(num))
      cout << num << " ";
  }
  return 0;
}

bool checkPalindrom(int num) {
  int n = num;
  int dig, rev = 0;
  while (num > 0) {
    dig = num % 10;
    rev = rev * 10 + dig;
    num  /= 10;
  }
  return (n == rev);
}

该解决方案基于this答案。

代码的主要问题是,您甚至没有使用循环,而是在函数中使用if语句。

票数 1
EN

Stack Overflow用户

发布于 2015-01-08 23:10:14

在第13行,我想是个错误。

(num = 0;num <= lim;num++)

同样在checkPalindrom函数中,最好不要使用递归。这样写要容易得多。

代码语言:javascript
复制
int checkPalindrom(int num) {
    int sum = 0, r;
    while (num){
        r = num % 10;
        sum = sum * 10 + r;
        num /= 10;
    }
    return sum;
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27850931

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档