zoukankan      html  css  js  c++  java
  • 全国软件专业人才开发与设计赛题之中等题“银行卡验证”

    版权声明:版权归作者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 }
  • 相关阅读:
    Openstack API 开发 快速入门
    virtualBox虚拟机到vmware虚拟机转换
    使用Blogilo 发布博客到cnblogs
    Openstack Troubleshooting
    hdoj 1051 Wooden Sticks(上升子序列个数问题)
    sdut 2430 pillars (dp)
    hdoj 1058 Humble Numbers(dp)
    uva 10815 Andy's First Dictionary(快排、字符串)
    sdut 2317 Homogeneous squares
    hdoj 1025 Constructing Roads In JGShining's Kingdom(最长上升子序列+二分)
  • 原文地址:https://www.cnblogs.com/weisteve/p/1804910.html
Copyright © 2011-2022 走看看