【问题】:用C++语言编写一个函数palindromeNumber,求[100,n]
范围内的回文数有哪些,在主函数中调用该函数。输出区间[100,n]
中所有的回文数,一行一个回文数,不需要输出其它无关的字符。
【回文数】:是指正序(从左向右)和倒序(从右向左)读都是一样的整数。例如,121 是回文,而 123 不是。
【代码方式一(推荐,简洁,易理解)】:
#include <iostream>
using namespace std;
int main() {
int n = 200;
// 判断输入n是否是100-10000之间的数
if (n > 100 && n < 10000) {
void palindromeNumber(int n);
// 1--n是100~10000之间的数-->此处去计算回文数
for (int k = 100; k <= n; k++) {
/** 计算回文数的函数
* 可以将数字num 重复num%10分离出个位数x,组成新的数m*10+x再执行num/10,直到num等于0为止。
* 看看组成新的数是不是跟数字n相等。
*/
int m = 0;
int num = k;
for (; num > 0;) {
m = m*10 + num%10; // 将数字num 重复n%10分离出个位数x,组成新的数m*10+x
num = num / 10; // 再执行num/10
}
if (m == k) { // 看看组成新的数是不是跟原数字相等
printf("%d\n", k); // 输出回文数
}
}
} else {
cout << "当前输入的数字不在100——10000范围内." << endl;
}
return 0;
}
【代码方式二】:
#include <iostream>
using namespace std;
int main() {
// 回文数计算结果
int hws = 0;
int n = 200;
// 判断输入n是否是100-10000之间的数
if (n > 100 && n < 10000) {
void palindromeNumber(int n);
// 1--n是100~10000之间的数-->此处去计算回文数
for (int k = 100; k <= n; k++) {
// 引用计算回文数的函数
palindromeNumber(k);
}
} else {
cout << "当前输入的数字不在100——10000范围内." << endl;
}
return hws;
}
/** 计算回文数的函数
* 可以将数字n 重复n%10分离出个位数x,组成新的数m*10+x再执行n/10,直到n等于0为止。
* 看看组成新的数是不是跟数字n相等。
*/
void palindromeNumber(int num) {
int n,m;
m = 0;
n = num;
for (; n > 0;) {
m = m*10 + n%10; // 将数字n 重复n%10分离出个位数x,组成新的数m*10+x
n = n / 10; // 再执行n/10
}
if (m == num) { // 看看组成新的数是不是跟数字n相等
printf("%d\n", num); // 输出回文数
}
}
【代码方式三】:
#include <iostream>
using namespace std;
int main() {
// 回文数计算结果
int hws = 0;
int n = 200;
// 判断输入n是否是100-10000之间的数
if (n > 100 && n < 10000) {
void palindromeNumber(int n);
// 1--n是100~10000之间的数-->此处去计算回文数
for (int k = 100; k <= n; k++) {
// 引用计算回文数的函数
palindromeNumber(k);
}
} else {
cout << "当前输入的数字不在100——10000范围内." << endl;
}
return hws;
}
// 计算回文数的函数
void palindromeNumber(int n) {
int b, c, d, e, f; int i, m;
if (n < 1000) {
b = (n / 100) % 10; //求各位的数
c = (n / 10) % 10;
d = n % 10;
if (n == ((d * 100) + (c * 10) + b)) { //判断是不是回文数的条件
i = n;
printf("%d\n", i); // 输出计算结果
}
} else {
b = (n / 1000) % 10;
c = (n / 100) % 10;
d = (n / 10) % 10;
e = n % 10;
if (n == ((e * 1000) + (d * 100) + (c * 10) + b)) {
m = n;
printf("%d\n", m); // 输出计算结果
}
}
}
【效果图】
输入数字范围错误:
输入数字范围正常:
参考: