首先,分享一个网站:https://cs50.readthedocs.io/#c
接下来:上代码——
- Q:输入卡号,判断卡的归属或不合法.
INVALID :非法卡号
AMEX:34、37开头 15位(eg:378282246310005)
MASTERCARD:51~55开头 16位
VISA :4开头 13 or 16位(eg:4003600000000014)
卡号合法性判断:
1.从倒数第2位往前,每间隔的数字乘2, 并且把所有数字相加
2.将相加的结果加上卡号中未乘以2的数字
3.如果第2步的结果,以0结尾,则是合法卡号。
解题代码①
# include <cs50.h>//注意cs是小写的(鄙人易错之处)
# include<stdio.h>
int main ()
{
long int i, m, c, d, e, f, p;
scanf("%ld", &m);
long int b = m, s = 0, a = 1;
while(a!=0)
{
a = b/100;
k = b/10;
b = a%10;
l = k%10;
s += 2*b;
s += l;
}
//判断AMEXDE条件
c = m - 3.4e14;//printf("%.0f\n",c/(1e13));
d = m - 3.7e14;//printf("%.0f\n",d/(1e13));
//判断Visa条件
e = m - 4e13;//printf("%.0f\n",e/(1e12));
f = m - 4e15;//printf("%.0f\n",d/(1e15));
//判断MasterCredit条件
for (i = 51; i < 56; i++)
{
if((m-i*(1e13))/ (i*(1e13))==0)
{
p = 1