• 第十届 蓝桥杯样题 —— 信用卡号验证


    【编程大题】信用卡号验证

      当你输入信用卡号码的时候,有没有担心输错了而造成损失呢?其实可以不必这么担心,因为并不是一个随便的信用卡号码都是合法的,它必须通过Luhn算法来验证通过。
    

    该校验的过程:

      1、从卡号最后一位数字开始,逆向将奇数位(1、3、5等等)相加。
    
      2、从卡号最后一位数字开始,逆向将偶数位数字,先乘以2(如果乘积为两位数,则将其减去9),再求和。
    
      3、将奇数位总和加上偶数位总和,结果应该可以被10整除。
    
      例如,卡号是:5432123456788881
    
      则奇数、偶数位(用红色标出)分布:5432123456788881
    
      奇数位和=35
    
      偶数位乘以2(有些要减去9)的结果:1 6 2 6 1 5 7 7,求和=35。
    
       最后35+35=70 可以被10整除,认定校验通过。
    
      请编写一个程序,从标准输入获得卡号,然后判断是否校验通过。通过显示:“成功”,否则显示“失败”。
    
      比如,用户输入:356827027232780
    
      程序输出:成功
    

    【程序测试参考用例】

       356406010024817     成功
    
      358973017867744     成功
    
      356827027232781     失败
    
      306406010024817     失败
    
      358973017867754     失败
    

    代码

    #include <iostream>
    #include <sstream>
    #include <cstring>
    #include <string>
    using namespace std;
    string ll2s(long long &num,string &str)
    {
    	stringstream ss;
    	ss<<num;
    	ss>>str;
    }
    int main()
    {
    	string num;
    	cin>>num;
    	while(1)
    	{
    		int len=num.length();
    		int ji=0,ou=0,number[20];
    		memset(number,0,sizeof(number));
    		for(int i=0;i<len;i++)
    			number[i]=num[i]-'0';
    		for(int i=0;i<len;i++)
    		{
    			if((i+1)%2!=0)
    	  		    ji+=number[len-i-1];
    			if((i+1)%2==0)
    			{
    				int x=2*number[len-i-1];
    				if(x>9) x-=9;
    				ou+=x;
    			}
    		}
    		if((ji+ou)%10==0) cout<<"成功"<<endl;
    		else cout<<"失败"<<endl;
    		cin>>num;
    	}
    	return 0;
    }
    
  • 相关阅读:
    信息收集之DNS域名解析
    集合遍历利器 -- 迭代器模式 介绍 使用场景案例 优缺点及程序演示
    简单工厂的霸霸 -- 抽象工厂模式 介绍 使用场景案例 优缺点及程序演示
    可能是目前最易理解的手写promise
    chrome 开发者工具实用技巧
    gulp常用插件之modernizr使用
    koa-cors 跨域设置中间件
    在nodejs 中如何fs文件系统模块
    nodejs操作MongoDB数据库 MongoDB增、删、改、查
    vue动态渲染样式 class
  • 原文地址:https://www.cnblogs.com/AlexKing007/p/12338657.html
Copyright © 2020-2023  润新知