打印给定范围内的所有回文数

Printing all palindrome numbers in a given range

我正在尝试编写一个程序来打印 [a, b] 范围内的所有回文。到目前为止,我已经写了这个,但是在我输入 a、b 的值后没有打印任何内容。什么东西少了?

#include "stdafx.h"
#include <iostream>
using namespace std;

int t = 0, rmd, z, a, b;

int reverse() {
    while (z != 0) {
        rmd = z% 10;
        t = t * 10 + rmd;
        z/= 10;
        }

    return t;
}

int palin() {
    if (a == reverse()) {
        return 1;
    }
    else 
        return 0;

}

int main() {

    cout << "a: "; cin >> a;
    cout << "b: "; cin >> b;

    while (a <= b) {
        z = a;
        if (palin()) 
            cout << a << endl;
        a++;
    }
    system("pause");
    return 0;
}

问题是变量 t 不是 局部于您的 reverse() 函数。它的值在接下来的调用中仍然存在,所以 reverse 的结果变成了与实际调用无关的垃圾。

您需要将 t 设置为 reverse() 本地以解决此问题。

一般来说,养成在变量所属的最内层范围内声明变量而不破坏代码的习惯是个好主意。在这种情况下,这将是 reverse() 函数的作用域 t,以及 main 其余变量的作用域; palin 应该以 a 作为参数。

您对变量的使用让您感到困惑。实际问题不是每次调用 reverse 时都将 t 设置为零,但您应该考虑如何使用变量作用域以及函数实际执行的操作。现在您有 2 个过程,它们对全局数据执行操作。而是尝试使用接受参数的函数来表述问题,并且 return 结果。

#include <iostream>

using namespace std;

int reverse(int z) {
    int t = 0;

    int rmd;
    while (z != 0) {
        rmd = z % 10;
        t = t * 10 + rmd;
        z/= 10;
    }

    return t;
}

int palin(int z) {
    return z == reverse(z);
}

int main() {
    int a, b;

    cout << "a: "; cin >> a;
    cout << "b: "; cin >> b;

    while (a <= b) {
        if (palin(a)) {
            cout << a << endl;
        }
        a++;
    }
    system("pause");
    return 0;
}