今天牛牛学到了回文串,他想在数字里面找回文,即回文数,回文数是正着读与倒着读都一样的数,比如1221,343是回文数,433不是回文数。请输出不超过n的回文数。
#include<stdio.h> int main() { int k = 0; int i = 0; //int j = 0; int gw = 0; int sw = 0; int bw = 0; int qw = 0; int ww = 0; scanf("%d", &k); for (i = 1; i <= k; i++)//产生0~k所有的数字 { if (i < 10) { printf("%d\n", i); } if (i >= 10 && i < 100) { gw = i % 10; sw = i / 10 % 10; if (gw == sw) { printf("%d\n", i); } } if (i >= 100 && i < 1000) { gw = i % 10; sw = i / 10 % 10; bw = i / 100 % 10; if (gw == bw) { printf("%d\n", i); } } if (i >= 1000 && i < 10000) { gw = i % 10; sw = i / 10 % 10; bw = i / 100 % 10; qw = i / 1000 % 10; if (qw == gw && sw == bw) { printf("%d\n", i); } } if (i >= 10000 && i < 100000) { gw = i % 10; sw = i / 10 % 10; bw = i / 100 % 10; qw = i / 1000 % 10; ww = i / 10000 % 10; if (ww == gw && sw == qw) { printf("%d\n", i); } } } return 0; }
#include <stdio.h> int main() { int a[30]; int n = 0; scanf("%d", &n); //回文数相当于换位置,后面的数一直*10,得到得结果与原来的一样 for (int i = 1; i<=n; i++) { //i的值还要和sum比较 int tmp = i; //sum的值每次也需要变成0,不然初值就不为0 int sum = 0; while (tmp) { sum = sum*10+ tmp % 10; tmp /= 10; } if(sum == i) printf("%d\n",sum); } return 0; }
/* 思路 : 可以使用用数组存放数据的操作 将1-100000中所有的数字都遍历出来 然后判断数组的下标 是否相等 ------------------------------------------------ 操作起来有点复杂 还是用取模和取余运算吧 */ // # include <stdio.h> // int main () // { // int a,b,c,d,e,f; // return 0; // } # include <stdio.h> int main () { int n = 0; scanf("%d",&n); for(int i=1;i<=n;i++) { if (i<10) { printf("%d\n",i); } else if (i<100) { if (i%10==i/10) { printf("%d\n",i); } } else if (i<1000) { if (i%10==i/100) { printf("%d\n",i); } } else if (i<10000) { if (i%10==i/1000&&i/100%10==i/10%10) //9999 9889 包括这样 { printf("%d\n",i); } } else if (i<100000) { if (i%10==i/10000&&i/1000%10==i/10%10) //99999 98889 { printf("%d\n",i); } } } return 0; }
#include <stdio.h> int main() { int n = 0;//输入的整数 int m = 0;//每次判断的数 int j = 0;//倒着读判断的数 scanf("%d", &n); for (int i = 1; i <= n; i++) { m = i; while (m)//计算倒着读 { j *= 10; j += m % 10; m = m / 10; } if (i == j)//判断并输出 printf("%d\n", j); j = 0;//初始化数据 } return 0; }
#include <stdio.h> #include <math.h> void test(int arr1[], int i, int* px) { arr1[*px] = i % 10; (*px)++; if (i / 10 != 0) { test(arr1, i / 10, px); } } int main() { int n = 0; scanf("%d", &n); int arr1[6] = { 0 }; int arr2[6] = { 0 }; if (n >= 1 && n <= 100000) { int i = 0; for (i = 1; i < 10; i++) { if (i / 10 == 0 && i % 10 != 0) { printf("%d ", i); } } for (i = 10; i < n; i++) { int j = 0; int count = 0; test(arr1, i, &count); int k = 5; while (k) { if (i / ((int)pow(10, k)) != 0) { arr2[0] = i / ((int)pow(10, k)); for (j = 1; j <= count - 2; j++) { if (k > 1) { arr2[j] = (i % ((int)pow(10, k))) / ((int)pow(10, k - 1)); k--; } } arr2[count - 1] = i % 10; break; } k--; } int count1 = 0; for (j = 0; j < count; j++) { if (arr1[j] == arr2[j]) { count1++; } } if (count1 == count) { printf("%d ", i); } } } return 0; }