【发布时间】:2019-01-13 12:22:18
【问题描述】:
这是关于信用卡问题。 所以,如果数字是 16 位,前两位是 51、52、53、54 或 55, 该卡是万事达卡。
一开始,我试过(51 <= j <= 55)。我认为这个条件是有道理的。因为j 是一个整数。但是由于某种原因,错误说(51 <= j <= 55)总是正确的(我不明白这个!)。
所以只好写(j==51 || j==52 || j==53 || j==54 || j==55),和(51 <= j <= 55)基本一样。
int j = c / pow(10,14);
if(pow(10,15) <= c < pow(10,16) && (j==51 || j==52 || j==53 || j==54 || j==55))
{
printf("MASTERCARD\n");
}
上面的代码运行良好..(我不知道为什么)
我必须对j 进行一些更改,从double j 到int j。
我猜是因为数字 51 到 55 是整数..?
无论如何,错误并没有说明pow(10,15) <= c < pow(10,16)。
为什么我不能只使用51 <= j <= 55?
【问题讨论】:
-
@SirJoBlack 我怀疑
c是double,这将在最后一位数字上提供更细微的错误。 -
@SirJoBlack:特别是,超过 9007199254740992 的每个奇数卡号都将被错位为偶数。
-
@SirJoBlack c 是信用卡号,很长
-
@phuclv 啊,谢谢。我试图在 C 中找到 10^15。我最终找到了幂函数。那么,如果我使用 1e15 ,,这是否意味着不需要包含
?
标签: c