本文主要是介绍全国软件专业人才开发与设计赛题之中等题“银行卡验证”,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
版权声明:版权归作者WeiSteven所有,转载请注明!
不是所有的银行卡都是有效地,它是遵循一定的规律的。
对于一个卡号,验证其证伪可以采用:
奇数位数字相加求和
偶数位每位乘以2,如果超过10,则减9作为此位数字,然后求偶数位和
奇数位和加上偶数位和应该是10的倍数。
如果不满足上述条件,则此银行卡号是非法的。
请编写程序,判断给定的银行卡号是否合法
参考答案:
代码
1 #include < stdio.h >
2 #include < string .h >
3 int main()
4 {
5 // freopen("2_3.txt","r",stdin);
6 char scard[ 100 ]; // 读取卡号数据
7 int sumOdd = 0 ;
8 int sumEven = 0 ;
9 printf( " 输入卡号:\n " );
10 while (scanf( " %s " ,scard) != EOF)
11 {
12 // 初始化需要用的变量
13 sumOdd = 0 ;
14 sumEven = 0 ;
15 int lenString = strlen(scard);
16 // 逆序进行偶奇数求和
17 for ( int i = lenString - 1 ;i >= 0 ;i -- )
18 {
19 if ((lenString - i) % 2 == 1 )
20 {
21 sumOdd += scard[i] - ' 0 ' ;
22 }
23 else
24 {
25 int stemp = (scard[i] - ' 0 ' ) << 1 ; // 偶数是*2 判断大小
26 sumEven += (stemp);
27 if (stemp >= 10 )
28 sumEven -= ( 9 );
29 }
30 }
31 if ((sumOdd + sumEven) % 10 == 0 )
32 printf( " 成功\n " );
33 else
34 {
35 printf( " 失败\n " );
36 }
37 printf( " 输入卡号:\n " );
38 }
39 return 1 ;
40 }
2 #include < string .h >
3 int main()
4 {
5 // freopen("2_3.txt","r",stdin);
6 char scard[ 100 ]; // 读取卡号数据
7 int sumOdd = 0 ;
8 int sumEven = 0 ;
9 printf( " 输入卡号:\n " );
10 while (scanf( " %s " ,scard) != EOF)
11 {
12 // 初始化需要用的变量
13 sumOdd = 0 ;
14 sumEven = 0 ;
15 int lenString = strlen(scard);
16 // 逆序进行偶奇数求和
17 for ( int i = lenString - 1 ;i >= 0 ;i -- )
18 {
19 if ((lenString - i) % 2 == 1 )
20 {
21 sumOdd += scard[i] - ' 0 ' ;
22 }
23 else
24 {
25 int stemp = (scard[i] - ' 0 ' ) << 1 ; // 偶数是*2 判断大小
26 sumEven += (stemp);
27 if (stemp >= 10 )
28 sumEven -= ( 9 );
29 }
30 }
31 if ((sumOdd + sumEven) % 10 == 0 )
32 printf( " 成功\n " );
33 else
34 {
35 printf( " 失败\n " );
36 }
37 printf( " 输入卡号:\n " );
38 }
39 return 1 ;
40 }
这篇关于全国软件专业人才开发与设计赛题之中等题“银行卡验证”的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!