首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >CS50 pset 1积分(长整型除以一个数字)

CS50 pset 1积分(长整型除以一个数字)
EN

Stack Overflow用户
提问于 2020-08-02 22:34:53
回答 1查看 73关注 0票数 1

我正在尽我最大的努力来解决这个问题。然而,我遇到了以下问题:

检查完总数后,我想验证卡号的前两位数字。因此,我使用以下方法:

代码语言:javascript
复制
int main(void)
{
  long long ccn;
  do
  {
    ccn = get_long_long("Credit Card No.:\n");
  }
  while (ccn < 0);
  int ccn_len;
  long long count = ccn;
  long long bccn = ccn;
  for (ccn_len = 0; count != 0; ccn_len++, count /= 10);
    int sum = 0; //checksum
    for (int i = 0; i < ccn_len; ccn /= 10, i++) 
    {
      if (i % 2 == 0)
      {
        sum += ccn % 10;
      }
      else
      {
        int digit = (ccn % 10) * 2;
        sum += digit / 10 + digit % 10;
      }
    }
    if (sum % 10 != 0) 
    {
      printf("INVALID");
    }
    else
    {
      int a = bccn / 1e13;
      if ((bccn / 1e13 == 34 || bccn / 1e13 == 37) && ccn_len == 15)
      {
        printf("AMERICAN EXPRESS");
      }
      else if (bccn / 1e12 == 4 && ccn_len == 13)
      {
        printf("VISA");
      }
      else if (ccn_len == 16)
      {
        if (bccn / 1e15 == 4)
        {
          printf("VISA");
        }
        if (bccn / 1e14 > 50 || bccn / 1e14 < 56)
        {
          printf("MASTERCARD");
        }
      }
      else
      {
        printf("INVALID");
      }
    }
  }
}

假设这是一张有效的AE卡: 378282246310005,长度为15位

在上面的代码中,我使用ccn / 1e13来获取前两位数,以检查它是34还是37。

但是,在满足校验和后,输出仍然显示无效。

我尝试使用另一种方法,我设置了一个变量a和a= ccn / 1e13,然后在if语句中放入a:

代码语言:javascript
复制
if ((a == 34 || a == 37) || ccn_len == 15)

这次一切都很好。

有人能告诉我我的代码出了什么问题吗?或者我如何写得更好?

非常感谢您的回复。

EN

回答 1

Stack Overflow用户

发布于 2020-08-03 01:19:51

1e13double类型的浮点常量。在bccn / 1e13中,bccn被转换为double,然后执行浮点除法,从而产生一个数字,如37.82822463100050214279690408147871494293212890625.因为37.82822463100050214279690408147871494293212890625不等于37,所以bccn / 1e13 == 37的计算结果为false。

重写您的代码,使其仅使用整数运算(不要使用浮点常量,如1e13),或者将信用卡“数字”视为数字字符串而不是整数。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63217225

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档