如何用c语言找出1~999中的所有回文数
依照数学定义,可以得知1-999中的回文数包括三类:
1 一位数。只有一位,每个都是回文数。
2 两位数。个位和十位相同的两位数是回文数,即形式为aa的两位数,a值为1-9。
3 三位数。个位和百位相同的三位数都是回文数,即形式为aba的三位数,a值为1-9,b值为0-9。
综合以上规律,可以写出以下程序:
#include <stdio.h>
int main()
{
int i,j;
for(i = 1; i < 10; i ++)
{
printf("%d,", i); //一位数
printf("%d%d,", i, i);//两位数
for(j = 0; j < 10; j ++)
printf("%d%d%d,",i,j,i);//三位数
printf("\n");//为方便阅读结果,加一个换行。
}
return 0;
}
该函数输出为:
以上是根据数学规律,打印出所有符合要求的回文数。
另外还有编程中最常用的暴力尝试方法。即对1-999中的所有数字,每个数都求其反序数字,如果与原值相等,则输出。
这种方式可以按大小顺序输出所有的回文数,需要计算量较大,用时比上一种方法会略长。
代码如下:
#include <stdio.h>
int reverse(int v)
{
int r = 0;
while(v)
{
r = r*10 + v%10;//取v的结尾数字,置于r的尾端,从而达到反序效果。
v/=10;//将剩余各个位向右移动一位。
}
return r;//返回结果
}
int main()
{
int i,j;
for(i = 1, j = 0; i < 999; i ++)
{
if(i == reverse(i))
{
printf("%-4d", i);//每个输出占4列,达到对其效果。
j++;
if(j % 10 == 0) printf("\n");//每10个数换行一次。
}
}
return 0;
}
输出
依照数学定义,可以得知1-999中的回文数包括三类:
1
一位数。只有一位,每个都是回文数。
2
两位数。个位和十位相同的两位数是回文数,即形式为aa的两位数,a值为1-9。
3
三位数。个位和百位相同的三位数都是回文数,即形式为aba的三位数,a值为1-9,b值为0-9。
综合以上规律,可以写出以下程序:
#include <stdio.h>
int main()
{
int i,j;
for(i = 1; i < 10; i ++)
{
printf("%d,", i); //一位数
printf("%d%d,", i, i);//两位数
for(j = 0; j < 10; j ++)
printf("%d%d%d,",i,j,i);//三位数
printf("\n");//为方便阅读结果,加一个换行。
}
return 0;
}
该函数输出为:
以上是根据数学规律,打印出所有符合要求的回文数。
另外还有编程中最常用的暴力尝试方法。即对1-999中的所有数字,每个数都求其反序数字,如果与原值相等,则输出。
这种方式可以按大小顺序输出所有的回文数,需要计算量较大,用时比上一种方法会略长。
代码如下:
#include <stdio.h>
int reverse(int v)
{
int r = 0;
while(v)
{
r = r*10 + v%10;//取v的结尾数字,置于r的尾端,从而达到反序效果。
v/=10;//将剩余各个位向右移动一位。
}
return r;//返回结果
}
int main()
{
int i,j;
for(i = 1, j = 0; i < 999; i ++)
{
if(i == reverse(i))
{
printf("%-4d", i);//每个输出占4列,达到对其效果。
j++;
if(j % 10 == 0) printf("\n");//每10个数换行一次。
}
}
return 0;
}
输出
void main(){
int i;
////个位数都是的。
for(i=1;i<10;i++)
printf("%d\n",i);
////两位数个位十位相同的就是
for(i=10;i<100;i++)
if(i/10==i%10)
printf("%d\n",i);
////三位数个位百位一样的就是
for(i=100;i<1000;i++)
if(i/100==i%10)
printf("%d\n",i);
return;
}