判断正整数

chuengchuenghq 2010-07-08 11:35:37
设 a = x+kz

a,x,z为已知,怎么判断k是否为一个大于0的整数(k是否为正整数),a,x,z为同一类型(int,float,double..)

C++没人理,发算法区来了
...全文
292 23 打赏 收藏 转发到动态 举报
写回复
用AI写文章
23 条回复
切换为时间正序
请发表友善的回复…
发表回复
wizard_tiger 2010-08-07
  • 打赏
  • 举报
回复
如果不超范围的话,计算k值k=(a-x)/z
先判断k是否大于0如大于0;
再将k值强制转换int型放入另一个变量a再判断a与k是否相等如相等便可证明k值是一个整数。
不过变量a的类型要与k相同并不是int型。
不知是否可行,请大虾指教!!!
BuleRiver 2010-07-11
  • 打赏
  • 举报
回复
a = x+kz

bool IsPositive(int a, int x, int z)
{
int tmp = a - x;
if (tmp == 0 || z == 0)
{
throw("无法判断");
}

return (tmp > 0 && z > 0) || (tmp < 0 && z < 0);
}
lazy_2010 2010-07-10
  • 打赏
  • 举报
回复
就算是 double,也是应该首先判断 a-x 和 z 两个数据的正负;假如已经知道 k 是整数,问题结束;

假如还需要判断 k 是否是整数:

所谓同时扩大 10 倍的方法,其实不靠谱,因为浮点数在计算机里面其实很多是有误差的,"是否是一个整数"这种判断需要设定一个允许的误差范围的。

请参考下面的代码进行是否整数的判断,假定 z 不是 0,数据不越界

double f = (a-x)/z;
int nf = (int)(f + 0.0001);
double fError = fabs(f - nf);
if (fError < Epsilon) // 需要事先指定 Epsilon 的数据,比如 0.0001
...
ssh87 2010-07-09
  • 打赏
  • 举报
回复
不超范围的话,(a-x)/z 算一下就行了
超的话,用大数做
ljia0 2010-07-09
  • 打赏
  • 举报
回复
正负好判断,就是整数比较难处理,是可以(a-x)和z同乘以10的N倍数把他化成大整数相除。
向万里 2010-07-09
  • 打赏
  • 举报
回复
if(a==x){
System.out.println("k等于0");
}
else if((a>x&&z>0)||(a<x&&z<0)){
System.out.println("k大于0");
}
else
System.out.println("k小于0");
张狂风 2010-07-09
  • 打赏
  • 举报
回复
我觉得没那么复杂啊,求出K来,大于0就是正的,小于0就是负的,还想怎么样啊
hengshan 2010-07-09
  • 打赏
  • 举报
回复
应该需要数学上的定理的。没那么简单
wxc1987821 2010-07-09
  • 打赏
  • 举报
回复
有这么复杂嘛
正负好判断,主要是值
tmp1 = a-x
tmp2 = (int)k;

return tmp1 == tmp2*z

如果说明k 就是int呀
angel6709 2010-07-09
  • 打赏
  • 举报
回复
decimal
michael122 2010-07-08
  • 打赏
  • 举报
回复
double的话,两边同乘一个10的幂次,化成整数
然后可以用大整数来做
chuengchuenghq 2010-07-08
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 michael122 的回复:]

不超范围的话,(a-x)/z 算一下就行了
超的话,用大数做
[/Quote]
告诉我double怎么算,谢谢~~!
chuengchuenghq 2010-07-08
  • 打赏
  • 举报
回复
问题是如果是float,double怎么办
toplinq 2010-07-08
  • 打赏
  • 举报
回复
这个。。。似乎很麻烦。如果是int类型,道是很简单, 判断a-x,z的正负,再判断(a-x)% z是否为0就可以了。如果是浮点类型的,精度问题就是很麻烦了
如果小数点后面尾数不多,我觉得可以输入的时候,就判断数值和尾数最长的那个数,假设为n,每个数乘以10的n次,转化成long或int来做。
如果数字太大,超过了整数范围,那么只能自己写或去维护一个精确数的类了。
不知道有没有好办法。
zzz9413 2010-07-08
  • 打赏
  • 举报
回复
楼主是求代码的?
酸法没难度
k=(a-x)/z
然后k来整除1看看
七十二寨寨主 2010-07-08
  • 打赏
  • 举报
回复
a,x,z都已知了,k值不就知道了么?
直接判断k是不是正整数不就行了?
是 真的很简单,还是 我没理解题意?
fanster28_ 2010-07-08
  • 打赏
  • 举报
回复
允许好多误差?
michael122 2010-07-08
  • 打赏
  • 举报
回复
不超范围的话,(a-x)/z 算一下就行了
超的话,用大数做
chuengchuenghq 2010-07-08
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 zeroieme 的回复:]

引用 8 楼 michael122 的回复:

double的话,两边同乘一个10的幂次,化成整数
然后可以用大整数来做

取double的指数位,找 a x z最大的,乘2的幂更好。
[/Quote]
写个例子好吧~ 谢谢
zeroieme 2010-07-08
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 michael122 的回复:]

double的话,两边同乘一个10的幂次,化成整数
然后可以用大整数来做
[/Quote]
取double的指数位,找 a x z最大的,乘2的幂更好。
加载更多回复(3)

33,008

社区成员

发帖
与我相关
我的任务
社区描述
数据结构与算法相关内容讨论专区
社区管理员
  • 数据结构与算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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