- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我尝试编写一个 C 程序来检查银行卡是否有效。
根据 Luhn 算法,您可以确定信用卡号(在语法上)是否有效,如下所示:
从数字的倒数第二位数字开始,每隔一个数字乘以 2,然后将这些产品的数字相加。
将总和与未乘以 2 的数字之和相加。
如果总和的最后一位是 0(或者更正式地说,如果总和模 10 与 0 全等),则该数字有效!
这有点令人困惑,所以让我们以我的 AmEx 为例:378282246310005。
为了便于讨论,我们首先从倒数第二个数字开始,在每隔一个数字下划线:
378282246310005
好吧,让我们将每个带下划线的数字乘以 2:
7•2 + 2•2 + 2•2 + 4•2 + 3•2 + 0•2 + 0•2
这给了我们:
14 + 4 + 4 + 8 + 6 + 0 + 0
现在让我们将这些产品的数字(即,不是产品本身)添加在一起:
1 + 4 + 4 + 4 + 8 + 6 + 0 + 0 = 27
现在让我们将总和 (27) 添加到未乘以 2 的数字之和:
27 + 3 + 8 + 8 + 2 + 6 + 1 + 0 + 5 = 60
是的,总和(60)的最后一位数字是 0,所以我的卡是合法的!
因此,验证信用卡号并不难,但手动验证确实有点乏味
#include <cs50.h>
#include <math.h>
#include <stdio.h>
int length(long long n);
int num_at(int x,long long y);
long long flip(double a);
int main(void)
{
//int total2=0;
//printf("Number: ");
//int i=get_int();
long long ll=get_long_long();
//if (ll<=0)
//{
// printf("INVALID\n");
//}
//for (int i=1;2*i<length(ll);i++)
//{
// total2=total2+2*num_at(i,ll);
//}
//int total1=0;
//for (int i=0;2*i<length(ll);i++)
//{
// total1=total1+num_at(i,ll);
//}
//int total=total1+total2;
//printf("%i\n",total);
printf("%lli\n",flip(ll));
}
int length(long long n)/* length of number */
{
long long x=1;
int len=0;
while(n-n%x!=0)/* x % y means x mod y*/
{
len++;
x=x*10;
}
return len;
}
int num_at(int x,long long y)/* digit at specific spot in number */
{
int digit=0;//the digit at position z(see below)
int z=1;
for(z=x;z>=0;z--)
{
digit=y%10;
y=y-y%10;
y=y/10;
}
return digit;
}
long long flip(double a)//flips a
{
long long b=0;
for(int y=0;y<length(a);y++)
{
b=b*10;
b=b+(a%pow(10.0,y+1)-a%pow(10.0,y))/pow(10.0,y);
}
return b;
}
编译时的错误是:
credit.c:99:15: error: invalid operands to binary expression ('double' and 'double')
b=b+(a%pow(10.0,y+1)-a%pow(10.0,y))/pow(10.0,y);
~^~~~~~~~~~~~~~
credit.c:99:31: error: invalid operands to binary expression ('double' and 'double')
b=b+(a%pow(10.0,y+1)-a%pow(10.0,y))/pow(10.0,y);
~^~~~~~~~~~~~
最佳答案
您无法对 double (或 float )执行模运算。原因很简单,余数仅针对整数算术定义。 2.3 除以 0.4 余数是多少?
因此,要做你想做的事,你需要将 double ( a 和 pow 的结果)强制转换为 long long 。
所以你可以这样做 ((long long) a) % (long long) pow( ... )
应该没问题。
以后您应该查看错误消息(以及警告)。
这里清楚地说明了二进制表达式的无效操作数,并标记了 % 运算符。
关于信用程序无法编译,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43060364/
我正在尝试在 Azure Public 和 Azure Stack 上配置基础架构。为此,我已按照 official documentation for Ansible 的建议将凭据存储在 $HOME
在我的 POC 项目中,我们希望使用一个 AWS 用户账户(AWS api key 集 1)中的 S3 和其他 AWS 用户账户(AWS api key 集 2)中的 SQS? 我检查了下面的文章:
我在 GoDaddy 上有两个域,主域和附加域。我购买了 SSL 积分并想在附加域上激活 ssl,所以我在 CPanel 上使用了“使用 SSL 积分”按钮,但出现一条消息说“这通过加密用户数据使您的
已结束。此问题正在寻求书籍、工具、软件库等的推荐。它不满足Stack Overflow guidelines 。目前不接受答案。 我们不允许提出寻求书籍、工具、软件库等推荐的问题。您可以编辑问题,以便
我是 CS50 和 C 的新手,目前正在完成第 1 周的作业“Credit”。我已经完成了大部分工作,但我遇到了一个问题,无论我觉得一个陈述应该多么真实,我的 if 比较都会将其标记为错误。我的逻辑是
我正在实现 PayPal Express Checkout,但在测试 PayPal Credit 作为付款方式时遇到了问题。当我选择它作为付款方式时,响应返回为 ERRORCODE0=10486,这意
1) 我正在尝试使用 Omnipay/Paypal 一段时间。我的问题是我收到“ACK = Success”,但在进入沙盒测试账户时,买卖双方都没有显示已预订的交易。 2) 我也感觉到并不是所有的 A
我在学习 Kotlin 语言时编写了以下代码。 class UserAdmin(credit: T) { init { println("Class with generics
我是一名优秀的程序员,十分优秀!