C#奇偶数判断

liangzhl 2009-11-19 05:08:50
如何判断一个数是奇数还是偶数???
例子 13 是奇数
14 是偶数
那么14.5 56.3 有小数点的怎么判断呢?????


本人实在穷,没的分了,请大家谅解
...全文
4137 30 打赏 收藏 转发到动态 举报
写回复
用AI写文章
30 条回复
切换为时间正序
请发表友善的回复…
发表回复
bryht 2009-11-20
  • 打赏
  • 举报
回复
[Quote=引用 21 楼 yymycabbage 的回复:]
2 楼不错
[/Quote]
有人夸,嘎嘎
liangzhl 2009-11-20
  • 打赏
  • 举报
回复
对啊,小数哪里有奇偶数之分呢,呵呵
是自己写错了,应该是如何判断最后一位为奇数或者偶数
viena 2009-11-20
  • 打赏
  • 举报
回复
计算机里的浮点数只有这些小数0.5,0.25,0.125,0.0625,0.03125……及其某些组合相加的和
转为二进制小数后是有限小数,
其它都是无限小数,而计算机位数有限
无限小数截断后,就丢失精度,不再与本来的数精确相等,也就没有尾数奇偶的说法

而这些有限小数,貌似尾数一定是5,也就是说一定是奇数
viena 2009-11-20
  • 打赏
  • 举报
回复
//移位比加减快的多,比乘除、取余更快的多得多得多得多得多得多得多得多得多得多得多
viena 2009-11-20
  • 打赏
  • 举报
回复
小数奇偶无稽之谈,除非是定点数或者字符串才有可能
如果是浮点数,在计算机里是二进制小数,与十进制小数相互转换会丢失精度的
随便一个十进制小数,很可能转为二进制小数后是一个无限小数

如果是字符串去最后一位判断即可
如果是定点数,还是9楼我说的方法最高效,因为移位是计算机里最简单最快的运算~
handsomemank 2009-11-20
  • 打赏
  • 举报
回复
小数能判断奇偶吗?如果可以的话 0.1 算 奇数还是偶数? 若算奇数,那么0.1 等于 0.10 吗? 那么0.10 又算 什么? 因此这个问题重点 我认为在四舍五入上。。。 要不 就没有意义了。。
helloquixote02 2009-11-19
  • 打赏
  • 举报
回复
晕。。什么破问题。。
Blackmanbar2010 2009-11-19
  • 打赏
  • 举报
回复
小数哪有奇偶之说?判断方法大家都说了,也不用我啰嗦了。
yymycabbage 2009-11-19
  • 打赏
  • 举报
回复
2 楼不错
vrhero 2009-11-19
  • 打赏
  • 举报
回复
小数怎么可能有奇偶...你这问题是最后一位有效数判断奇偶...

最高效的还是转为字符串判断...
double number = 232.30;
string s = number.ToString();
switch (s[s.Length - 1])
{
case '1':
case '3':
case '5':
case '7':
case '9':
Console.Write("odd");
break;
default:
Console.Write("even");
break;
}

但是有一个问题...就是小数最后一位是零用什么规则,这个你确定了规则格式化一下就行了...
liangzhl 2009-11-19
  • 打赏
  • 举报
回复
自己搞定了,就跟17楼说的差不多,就是如果输入的有小数,最后位为小数点呢。呵呵
东海凌波 2009-11-19
  • 打赏
  • 举报
回复
小数的怎么判断,学习。整数对2取余就可以。
awpszq 2009-11-19
  • 打赏
  • 举报
回复
敲错了 后面else里的是dNum*10%2 直接粘贴的 - -
awpszq 2009-11-19
  • 打赏
  • 举报
回复

double dNum;
int iNum=Convert.ToInt32(dNum);
//整数判断
if(dNum=iNum)
{
if((iNum%2)=0)
{
//这个数是偶数
}
else
{
//这个数是奇数
}
}
//小数的判断
else
{
if((iNum*10%2)=0)
{
//这个数是偶数
}
else
{
//这个数是奇数
}
}
//直接在回复敲的 没缩进 对付看吧
liangzhl 2009-11-19
  • 打赏
  • 举报
回复
整数的我会,就是如何判断小数的啊 啊啊 啊啊啊啊啊啊 啊
sunjiakai 2009-11-19
  • 打赏
  • 举报
回复
jf
nixiang12 2009-11-19
  • 打赏
  • 举报
回复

using System;

namespace Test
{
class Program
{
static void Main(string[] args)
{
double d1 = 14.5;
int i1 = Convert.ToInt16(d1);
double d2 = 56.3;
int i2 = Convert.ToInt16(d2);
if (i1 % 2 == 0)
{
Console.WriteLine(d1 + "是偶数");
}
else
{
Console.WriteLine(d1 + "不是偶数");
}
if (i2 % 2 == 0)
{
Console.WriteLine(d2 + "是偶数");
}
else
{
Console.WriteLine(d2 + "不是偶数");
}
Console.ReadLine();
}
}
}


把double 强制转换成 int类型的 失去精度 然后进行判断
  • 打赏
  • 举报
回复
对2取余还不错嘛
Comforter 2009-11-19
  • 打赏
  • 举报
回复
好多方法啊
simuyu 2009-11-19
  • 打赏
  • 举报
回复
转换成string类型,截取最后一位,再转换整型。
笨人有笨法!
加载更多回复(9)
A*算法求解八码问题 1、A*算法基本思想: 1)建立一个队列,计算初始结点的估价函f,并将初始结点入队,设置队列头和尾指针。 2)取出队列头(队列头指针所指)的结点,如果该结点是目标结点,则输出路径,程序结束。否则对结点进行扩展。 3)检查扩展出的新结点是否与队列中的结点重复,若与不能再扩展的结点重复(位于队列头指针之前),则将它抛弃;若新结点与待扩展的结点重复(位于队列头指针之后),则比较两个结点的估价函中g的大小,保留较小g值的结点。跳至第五步。 4)如果扩展出的新结点与队列中的结点不重复,则按照它的估价函f大小将它插入队列中的头结点后待扩展结点的适当位置,使它们按从小到大的顺序排列,最后更新队列尾指针。 5)如果队列头的结点还可以扩展,直接返回第二步。否则将队列头指针指向下一结点,再返回第二步。 2、程序运行基本环境: 源程序所使用编程语言:C# 编译环境:VS2010,.net framework 4.0 运行环境:.net framework 4.0 3、程序运行界面 可使用程序中的test来随机生成源状态与目标状态 此停顿过程中按Enter即可使程序开始运行W(n)部分; 此停顿部分按Enter后程序退出; 4、无解问题运行情况 这里源程序中是先计算源状态与目标状态的逆序对的奇偶性是否一致来判断是否有解的。下面是无解时的运行画面: 输入无解的一组源状态到目标状态,例如: 1 2 3 4 5 6 7 8 0 1 2 3 4 5 6 8 7 0 运行画面如下: 5、性能比较 对于任一给定可解初始状态,状态空间有9!/2=181440个状态;当采用不在位棋子作为启发函时,深度超过20时,算法求解速度较慢; 其中启发函P(n)与W(n)的含义如下: P(n): 任意节点与目标结点之间的距离; W(n): 不在位的将牌; 源状态 目标状态 P(n) 生成节点 W(n) 生成节点 P(n) 扩展节点 W(n) 扩展节点 2 8 3 1 6 4 7 0 5 1 2 3 8 0 4 7 6 5 11 13 5 6 1 2 3 8 0 4 7 6 5 0 1 3 8 2 4 7 6 5 6 6 2 2 4 8 2 5 1 6 7 0 3 7 4 2 8 5 6 1 3 0 41 79 22 46 6 2 5 8 7 0 3 1 4 0 3 6 7 1 8 4 5 2 359 10530 220 6769 7 6 3 1 0 4 8 5 2 2 8 7 1 3 4 6 5 0 486 8138 312 5295 下图是解决随机生成的100中状态中,P(n)生成函的生成节点与扩展节点统计图: 由上图可知,P(n)作为启发函,平均生成节点大约在1000左右,平均扩展节点大约在600左右; 下图是解决随机生成的100中状态中,W(n)生成函的生成节点与扩展节点统计图: 由上图可知,W (n)作为启发函,平均生成节点大约在15000左右,是P(n)作为启发函时的平均生成节点的15倍;W (n)作为启发函,平均扩展节点大约在10000左右,是P(n)作为启发函时的平均扩展节点的15倍; 下图是解决随机生成的100中状态中,两个生成函的生成节点与扩展节点统计图: 由上述图表可以看到,将P(n)作为启发函比将W(n)作为启发函时,生成节点与扩展节点更稳定,相比较来说,采用P(n)作为启发函的性能比采用W(n)作为启发函的性能好。 6、源代码说明 1)AStar-EightDigital-Statistics文件夹:用来随机生成100个状态,并对这100个状态分别用P(n)与W(n)分别作为启发函算出生成节点以及扩展节点,以供生成图表使用;运行界面如下: 2)Test文件夹:将0-8这9个字随机排序,用来随机生成源状态以及目标状态的;运行界面如下: 3)AStar-EightDigital文件夹:输入源状态和目标状态,程序搜索出P(n)与W(n)分别作为启发函时的生成节点以及扩展节点,并给出从源状态到目标状态的移动步骤;运行界面如下: 提高了运行速度的几处编码思想: 1、 在维护open以及close列表的同时,也维护一个类型为hashtable的open以及close列表,主要用来提高判断当前节点是否在open列表以及close列表中出现时的性能; 2、 对于每个状态,按照从左到右,从上到下,依次将字拼接起来,形成一个唯一标识identify,通过该标识,可以直接判断两个状态是否是同一个状态,而不需要循环判断每个位置上的字是否相等 3、 在生成每个状态的唯一标识identify时,同时计算了该状态的空格所在位置,通过空格所在位置,可以直接判断能否进行上移、下移、左移、右移等动作; 4、 只计算初始节点的h值,其它生成的节点的h值是根据当前状态的h值、移动的操作等计算后得出的,规则如下: a) 采用W(n)这种方式,不在位置的将牌,共有以下3中情况: i. 该字原不在最终位置上,移动后,在其最终位置上 这种情况下,生成的子节点的h值= 父节点的h值-1 ii. 该字原在最终位置上,移动后,不在其最终位置上 这种情况下,生成的子节点的h值= 父节点的h值 +1 iii. 该字原不在最终位置上,移动后,还是不在其最终位置上 这种情况下,生成的子节点的h值= 父节点的h值 iv. 该字原在最终位置上,移动后,还在其最终位置 这种情况不存在 b) 采用P(n)这种方式,节点与目标距离,可通过下面3步完成 i. 首先计算在原位置时,与目标位置的距离,命名为Distance1 ii. 移动后,计算当前位置与目标位置的距离,命名为Distance2 iii. 计算子节点的h值: 子节点的h值 = 父节点的h值- Distance1+ Distance2 5、 在任意状态中的每个字和目标状态中同一字的相对距离就有9*9种,可以先将这些相对距离算出来,用一个矩阵存储,这样只要知道两个状态中同一个字的位置,就可查出它们的相对距离,也就是该字的偏移距离;例如在一个状态中,字8的位置是3,在另一状态中位置是7,那么从矩阵的3行7列可找到2,它就是8在两个状态中的偏移距离。

110,536

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

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