回文数C语言程序编写
一、回文数C语言程序编写函数
回文数是指一个数字从左右两边读都是一样的,比如121、333等等。编写一个判断回文数的函数非常简单,只需要将数值转换为字符串,然后比较第i位和第n-i-1(n是位数)位字符是否相同即可。
#include <stdio.h>
#include <string.h>
int isPalindrome(int num){
char s[12];
sprintf(s, "%d", num);
int len = strlen(s);
for (int i = 0; i < len / 2; i++){
if (s[i] != s[len-i-1]) return 0;
}
return 1;
}
int main(){
int num = 12321;
printf("%d\n", isPalindrome(num)); // 输出 1
return 0;
}
二、回文数C语言程序编写200到3000
下面是一个程序,用于输出200到3000之间的所有回文数字:
#include <stdio.h>
int isPalindrome(int num){
// 略去 isPalindrome 函数代码
}
int main(){
for (int i = 200; i <= 3000; i++){
if (isPalindrome(i)) printf("%d ", i);
}
return 0;
}
三、回文数C语言程序编写思路
回文数的基本判断方法已经在第一部分介绍,这里介绍一下回文数的生成思路。由于回文数是从左往右和从右往左读是一样的,所以我们可以考虑生成回文数的一半,再将这一半数字翻转后拼接在一起。例如,我们要生成一个五位数的回文数。我们可以先生成前三位数字,然后将这三位数字翻转得到后三位数字,最后拼接在一起即可。
#include <stdio.h>
int main(){
int n = 5;
int half = n / 2;
for (int i = 1; i < 10; i++){
// 生成前一半数字
int num = i;
for (int j = 1; j < half; j++){
num = num * 10 + i;
}
// 将前一半数字翻转
int tmp = num;
int reverse = 0;
while (tmp){
reverse = reverse * 10 + tmp % 10;
tmp /= 10;
}
// 拼接成回文数
if (n % 2 == 0){
printf("%d%d ", num, reverse);
} else{
for (int k = 0; k < 10; k++){
printf("%d%d%d ", num, k, reverse);
}
}
}
return 0;
}
四、五位回文数C语言程序编写
生成五位回文数的方法类似于上面介绍的生成N位回文数的方法,不同的是前一半数字的生成需要从10开始。
#include <stdio.h>
int main(){
for (int i = 10; i < 100; i++){
int num = i * 1000 + i / 10;
if (num < 10000 && isPalindrome(num)) printf("%d ", num);
}
return 0;
}
五、判断回文数C语言程序
这是一个最简单的判断回文数的程序:
#include <stdio.h>
int main(){
int num = 12321;
int tmp = num;
int reverse = 0;
while (tmp){
reverse = reverse * 10 + tmp % 10;
tmp /= 10;
}
if (num == reverse) printf("Yes\n");
else printf("No\n");
return 0;
}
六、回文数C语言程序编写数组
可以使用数组存储多个回文数字:
#include <stdio.h>
int main(){
int palindromes[] = {121, 232, 343, 454, 565, 676, 787, 898, 999};
int len = sizeof(palindromes) / sizeof(palindromes[0]);
for (int i = 0; i < len; i++){
if (isPalindrome(palindromes[i])) printf("%d ", palindromes[i]);
}
return 0;
}
七、回文数C语言程序编写字符串
可以先将数字转化为字符串,再判断是否回文:
#include <stdio.h>
#include <string.h>
int main(){
int num = 12321;
char s[12];
sprintf(s, "%d", num);
int len = strlen(s);
int isPalindromes = 1;
for (int i = 0; i < len / 2; i++){
if (s[i] != s[len-i-1]){
isPalindromes = 0;
break;
}
}
if (isPalindromes) printf("Yes\n");
else printf("No\n");
return 0;
}
八、回文数C语言程序编写三位数
与五位回文数程序类似,生成三位回文数的规律是:回文数的百位和个位数字相同、十位数字任意。
#include <stdio.h>
int main(){
for (int i = 1; i < 10; i++){
int num = i * 101;
if (isPalindrome(num)) printf("%d ", num);
}
return 0;
}
九、回文数C语言程序编写要用函数
上面的程序中已经多次使用了isPalindrome
函数,下面是该函数的完整代码:
#include <stdio.h>
#include <string.h>
int isPalindrome(int num){
char s[12];
sprintf(s, "%d", num);
int len = strlen(s);
for (int i = 0; i < len / 2; i++){
if (s[i] != s[len-i-1]) return 0;
}
return 1;
}
int main(){
int num = 12321;
if (isPalindrome(num)) printf("Yes\n");
else printf("No\n");
return 0;
}
十、回文数C语言程序编写while
这个程序使用while循环判断一组数值是否符合条件:
#include <stdio.h>
#include <string.h>
int isPalindrome(int num){
// 略去 isPalindrome 函数代码
}
int main(){
int num, sum = 0;
while (scanf("%d", &num) != EOF){
if (isPalindrome(num)) sum += num;
}
printf("%d\n", sum);
return 0;
}