社区
C语言
帖子详情
请问个问题用C语言怎样判断一个整数是不是对称数(即:3、1221、55等等)谁能说说解题思路,不要求有程序
tracy19822004
2005-11-07 12:40:51
请问个问题用C语言怎样判断一个整数是不是对称数(即:3、1221、55等等)谁能说说解题思路,不要求有程序
...全文
1971
16
打赏
收藏
请问个问题用C语言怎样判断一个整数是不是对称数(即:3、1221、55等等)谁能说说解题思路,不要求有程序
请问个问题用C语言怎样判断一个整数是不是对称数(即:3、1221、55等等)谁能说说解题思路,不要求有程序
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用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;
如果这都不算爱
2005-11-07
打赏
举报
回复
判断一个整数是否是对称数
--------------------------------------------------------------------------------
源作者:追风 人气: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
打赏
举报
回复
特别强调不能把它转化为字符型
C语言
经典算法100道实战题
本课程【
C语言
经典算法100道实战题】视频,知识体系全面,语言通俗易懂,培养编程兴趣、拓宽编程思维、提高动手编码能力,经典算法涉及
数
学知识应用、
数
据结构排序算法、图形编程应用、简单游戏算法。
特殊回文
数
C++解法
问题描述 123321是
一个
非常特殊的
数
,它从左边读和从右边读是一样的。 输入
一个
正
整
数
n, 编程求所有这样的五位和六位十进制
数
,满足各位
数
字之和等于n 。 输入格式 输入一行,包含
一个
正
整
数
n。 输出格式 按从小到大的顺序输出满足条件的
整
数
,每个
整
数
占一行。
数
据规模和约定 1<=n<=54
解题
思路
看到问题的描述,考虑到用for循环,对所有可能的情况都计算一遍,同时加入if
判断
,if的
判断
条件就是问题描述的第二点
要求
;由于输出的十进制
数
具有
对称
性,因此
200个经典
C语言
程序
1.绘制余弦曲线 在屏幕上用“*”显示0~360度的余弦函
数
cos(x)曲线 *问题分析与算法设计 如果在
程序
中使用
数
组,这个问题十分简单。但若规定不能使用
数
组,问题就变得不容易了。 关键在于余弦曲线在0~360度的区间内,一行中要显示两个点,而对一般的显示器来
说
,只能按行输出,即:输出第一行信息后,只能向下一行输出,不能再返回到上一行。为了获得本文
要求
的图形就必须在一行中一次输出两个“*”。 为了同时得到余弦函
数
cos(x)图形在一行上的两个点,考虑利用cos(x)的左右对
nyoj
c语言
回文
数
,回文
数
二(acm训练)
问题 1161: [回文
数
(二)] 时间限制: 1Sec 内存限制: 128MB 提交: 133 解决: 51 题目描述 若
一个
数
(首位不为零)从左向右读与从右向左读都一样,我们就将其称之为回文
数
.例如:给定
一个
10进制
数
56,将56加65(即把56从右向左读),得到121是
一个
回文
数
.又如:对于10进制
数
87:STEP1:87+78 = 165 STEP2:165+561 = 726ST...
问题 G: 最小的回文
数
问题 G: 最小的回文
数
时间限制: 1 Sec 内存限制: 32 MB 提交: 43 解决: 13 [提交][状态][讨论版] 题目描述 回文
数
是从前往后和从后往前得到的
数
是相同的。 现给你
一个
正
整
数
N,
请
你找到比N大的最小的那个回文
数
P。 输入 输入包含多组测试
数
据。 每组输入
一个
正
整
数
N,N不超过10000位,并且N不包含前导0。 输出 对于每组输入,输出比N大的最小的那个回文
数
P。 样...
C语言
69,371
社区成员
243,082
社区内容
发帖
与我相关
我的任务
C语言
C语言相关问题讨论
复制链接
扫一扫
分享
社区描述
C语言相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章