请问个问题用C语言怎样判断一个整数是不是对称数(即:3、1221、55等等)谁能说说解题思路,不要求有程序

tracy19822004 2005-11-07 12:40:51
请问个问题用C语言怎样判断一个整数是不是对称数(即:3、1221、55等等)谁能说说解题思路,不要求有程序
...全文
1971 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
K 2005-11-07
  • 打赏
  • 举报
回复
首先确定一下你的判断规则
1是不是对数?奇数长度的字符串算不算对数?
比如12321
判断:
先得到字符串的长度,大于1就除以2,然后用一个循环


bool f=true;
int len=strlen(buf);
先检测规则,奇数长度,偶数长度?
if (len%2==0) 偶数
else 奇数

int half=len/2;
for (int i=0;i<half;i++)
{
if (buf[i]!=buf[len-i-1])
{
f=false;
break;
}
}
cout<<hex<<f<<endl;
return f;
  • 打赏
  • 举报
回复
判断一个整数是否是对称数

--------------------------------------------------------------------------------
源作者:追风 人气:4299


  昨天到一家公司笔试,做了一道判断一个整数是否是对称数的题.要求用Pascal语言,回来后我也用C#来实现.算法如下,期望对初学C#的朋友有点帮助.这里我用了两种算法实现.
  算法一,先取首个与末个数字比较,再取第二个与倒数第二个字符比较,以此类推...在每一次比较中若不相等则返回一个为false的bool值,即这个数不是对称数.具体程序如此而已下:
using System;
namespace ConsoleApplication3
{
/// <summary>
/// Summary description for Class1.
/// </summary>
class Class1
{
public static void Main()
{
int a=36455463;
bool flag;
flag=Symmetry(a);
if(flag)
Console.WriteLine(a+"是对称数!");
else
Console.WriteLine(a+"不是对称数!");
}
public static bool Symmetry(int Val)
{
string s;
s=Val.ToString();
char x,y;
bool flag=true; //如果Val是对称数flag为真,否则为假
for(int i=0;i<s.Length/2;i++)
{
x=s[i];
y=s[s.Length-1-i];
if(x!=y)
{
flag=false; //不是对称数
}
}
return flag;
}
}
}



  算法二,先定义一个字符串,按倒序的方式读入这个整数依次用连接字符串的文法赋给这个串.最后比较两个字符串是否相等.若不相等则返回一个为false的bool值,即这个数不是对称数.具体程序如此而已下:
using System;



namespace ConsoleApplication3
{
/// <summary>
/// Summary description for Class1.
/// </summary>
class Class1
{
public static void Main()
{
int a=36455463;
bool flag;
flag=Symmetry(a);
if(flag)
Console.WriteLine(a+"是对称数!");
else
Console.WriteLine(a+"不是对称数!");
}
public static bool Symmetry(int Val)
{
string s,x="";
s=Val.ToString();
bool flag=true; //如果Val是对称数flag为真,否则为假
for(int i=s.Length-1;i>=0;i--)
{
x=x+s[i];

}
Console.WriteLine(s+" "+x);
if(s.Trim()!=x.Trim())
{
flag=false; //不是对称数
}
return flag;
}
}
}


tracy19822004 2005-11-07
  • 打赏
  • 举报
回复
是个数值不是字符 也不能转化为字符型
th001 2005-11-07
  • 打赏
  • 举报
回复
up!
快乐鹦鹉 2005-11-07
  • 打赏
  • 举报
回复
这还不好办么。分别定义两个遍历指针,一个从第一个字符开始向后移动,一个从最后一个字符向前移动。每次两个指针都要移动。判断两个指针指向的字符是否相同,相同则继续,不同则不是对称数;如果发现前指针位置>=后指针位置,则遍历结束,该数为对称数。
smltiger 2005-11-07
  • 打赏
  • 举报
回复
先转成字符型,再设let,right两个指针,left从左向右查找,right从右向左查找,当left的值=right的值且left=right时,OK
cdo 2005-11-07
  • 打赏
  • 举报
回复
觉得还是换成字符串的方法最简单
SKYBULE 2005-11-07
  • 打赏
  • 举报
回复
学习中!
gamelearner 2005-11-07
  • 打赏
  • 举报
回复
#include <math.h>
bool IsHuiWen( size_t n )
{
size_t size = 1, nn = n;
while( nn/=10 ) size++;
for( size_t i = 0; i < size/2; i++ )
{
size_t j = (size_t)pow( 10, size-1-2*i );
if( n/j != n%10 )
return false;
n = n%j/10;
}
return true;
}

#include <iostream>
using namespace std;
void main()
{
cout << IsHuiWen( 12221 );
}
csucdl 2005-11-07
  • 打赏
  • 举报
回复
是回文数吧
如果输入的是机器能够表示的整数范围内的话,倒也好办
判断该数和他的反序数相等否
bool IsPal(const int &n)
{
int d = 0;
int i = n;
while(i != 0)
{
d *= 10;
d += i % 10;
i /= 10;
}

return (d == n);
}
chijiao 2005-11-07
  • 打赏
  • 举报
回复
应该很容易看懂的吧:
bool IsDuiCheng(long iIll)
{
// printf("%ld",iIll);
if(iIll < 0)
{
return false;
}
if(iIll <= 9)
{
return true;
}

long iHalf = 0 ;
long iMuShu = 0;
for( ; ; )
{
iMuShu = iIll % 10 ;
iIll = iIll / 10;
if(iHalf > iIll || iIll <= 0)
{
return false;
}

iHalf *= 10;
iHalf += iMuShu;
if(iIll == iHalf)
{
return true;
}
}

return false;
}
ttfy1234 2005-11-07
  • 打赏
  • 举报
回复
楼上的想法不错!
wuwen19 2005-11-07
  • 打赏
  • 举报
回复
要是不想转成串的话,
循环 除10,商除10,余数乘10,
判断结果

int print_num(int num)
{
int over = 0;
int quotient = 0;

quotient = num;
while(1)
{
over = over*10 + quotient%10 ;
quotient=quotient/10;
if ( quotient == 0 )
break;
}

printf("num = <%d>\n",num);
printf("over = <%d>\n",over);

if (num == over )
return 1;
else
return 0;
}


字符串方法一头一尾指针移动判断就可以了。

晨星 2005-11-07
  • 打赏
  • 举报
回复
第一步,把一个整数转化成字符串;
第二步,按照快乐鹦鹉说的做。
优化:遇到负数,直接返回不是。
caigp 2005-11-07
  • 打赏
  • 举报
回复
int i,j=0;
while(i!=0){
j=j*10+i%10;
i=i/10;
}
if(i==j) printf(" hui wen! ");
tracy19822004 2005-11-07
  • 打赏
  • 举报
回复
特别强调不能把它转化为字符型

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧