定义:如果将某个自然数的各位数字顺序倒过来,得到的数仍为它本身,则称这个自然数为回文数。
例如1331,11,2332这样的自然数。
转载请注明出处。
1.回文数的判断
利用定义,将数n的各位顺序颠倒后的数convser_n与n比较,如果相等,则n是回文数。
算法:
2.给定一个数和位数,生成其对应得回文数。
例如给定32,对应位数为4,生成的回文数应为3224。
又如给定32,对于位数为3,生成的回文数应为323。
相应算法如下:
其中n为给定的数,len为位数。
3.生成任意位数内的所有回文数,比如所有4位数的回文数。
分析:
1).对于位数为奇数如3位数的回文数101,我们通过10->99来构造101->999.
2). 对于位数为偶数如4为回文数1001,同样可以10->99来构造1001->9999
3).可以发现3位数的基100等于10的(3/2)次方。(计算机里整除3/2=1)而四位数的基为10的((4-1)/2)次方。
很容易得到n位数回文数的循环范围为10^(n-1)/2到10^(n+1)/2-1。然后就利用上一小节所用的给定数和位数构造回文数。
代码如下:
例如1331,11,2332这样的自然数。
转载请注明出处。
1.回文数的判断
利用定义,将数n的各位顺序颠倒后的数convser_n与n比较,如果相等,则n是回文数。
算法:
public bool IsPalind(int n)
{
int converse_n = 0;
int m=0;
while(n>0)
{
m = n % 10; //取余,获得n的低位
n = n / 10; //整除,截断n
converse_n = m + converse_n * 10; //累加,生成converse_n
}
if (converse_n != n)
{
return false;
}
else
{
return true;
}
}
{
int converse_n = 0;
int m=0;
while(n>0)
{
m = n % 10; //取余,获得n的低位
n = n / 10; //整除,截断n
converse_n = m + converse_n * 10; //累加,生成converse_n
}
if (converse_n != n)
{
return false;
}
else
{
return true;
}
}
2.给定一个数和位数,生成其对应得回文数。
例如给定32,对应位数为4,生成的回文数应为3224。
又如给定32,对于位数为3,生成的回文数应为323。
相应算法如下:
其中n为给定的数,len为位数。
public int MakePalind(int n,int len)
{
int m, a, t, r, k;
k = n;
m = 0; a = 1; t = 0;
if (len % 2 != 0)
{
n = n / 10;
if (n == 0)
return k;
}
while (n != 0)
{
m = n % 10;
n = n / 10;
t = t * 10 + m;
a *= 10;
}
r = k * a + t;
return r;
}
{
int m, a, t, r, k;
k = n;
m = 0; a = 1; t = 0;
if (len % 2 != 0)
{
n = n / 10;
if (n == 0)
return k;
}
while (n != 0)
{
m = n % 10;
n = n / 10;
t = t * 10 + m;
a *= 10;
}
r = k * a + t;
return r;
}
3.生成任意位数内的所有回文数,比如所有4位数的回文数。
分析:
1).对于位数为奇数如3位数的回文数101,我们通过10->99来构造101->999.
2). 对于位数为偶数如4为回文数1001,同样可以10->99来构造1001->9999
3).可以发现3位数的基100等于10的(3/2)次方。(计算机里整除3/2=1)而四位数的基为10的((4-1)/2)次方。
很容易得到n位数回文数的循环范围为10^(n-1)/2到10^(n+1)/2-1。然后就利用上一小节所用的给定数和位数构造回文数。
代码如下:
public void CreatePalind(int n)
{
int len = n;
n = (n + 1) / 2;
int baseNum = 1;
for (int i = 0; i < n; i++)
{
baseNum = baseNum * 10;
}
//int j = 0;
for (int i = baseNum / 10; i < baseNum; i++)
{
if (i % 10 == 0)
{
Console.WriteLine();
}
long pp = Convert.ToInt32(this.MakePalind(i, len));
Console.Write(pp + " ");
}
}
{
int len = n;
n = (n + 1) / 2;
int baseNum = 1;
for (int i = 0; i < n; i++)
{
baseNum = baseNum * 10;
}
//int j = 0;
for (int i = baseNum / 10; i < baseNum; i++)
{
if (i % 10 == 0)
{
Console.WriteLine();
}
long pp = Convert.ToInt32(this.MakePalind(i, len));
Console.Write(pp + " ");
}
}