如何在数字中添加两个整数

时间:2012-12-13 23:12:47

标签: java numbers

我正在写一张信用卡验证程序。我试图看一个产品是否超过1位数(即10),如果是,我需要将两个整数加在一起。例如10将是1 + 0,等于1,我该怎么做?

这是我到目前为止所做的:

public class CreditCard{
public static void main(String args[]){

    //Take in a 16 digit credit card number
    Scanner in=new Scanner (System.in);
    int num[]=new int[16];
    int i=0;


    for (i=0;i<num.length;i++) {
        System.out.println("Please enter a 16 digit credit card number");
        num[i]=in.nextInt();

    }
    if (num.length < 16 || num.length > 16)
        {
            System.out.println("Invalid");
        }
     else
    {

        //multiply every other number by 2, starting with place 16, and find the sum(sum1)
         int num1 = (num[16] * 2);
         int num2 = (num[14] * 2);
         int num3 = (num[12] * 2);
         int num4 = (num[10] * 2);
         int num5 = (num[8] * 2);
         int num6 = (num[6] * 2);
         int num7 = (num[4] * 2);
         int num8 = (num[2] * 2);

         if( num1 > 9)

         int sum1 = (num[16] * 2) + (num[14] * 2) + (num[12] * 2) + (num[10] * 2) + (num[8] * 2) + (num[6] * 2) + (num[4] *2) + (num[2] *2);
         int sum2 = (num[15] + num[13] + num[11] + num[9] + num[7] + num[5] + num[3] + num[1]);

        int totalSum = sum1 + sum2;
        if (totalSum % 10 != 0)
        {
            System.out.println("Invalid card number!!");
        }
        else

        {  
            System.out.println(" Valid Credit Card Number!!");


        }

      }      
}
}

6 个答案:

答案 0 :(得分:2)

不是重新发明轮子,你可以查看Luhn algorithm,这是一种广泛使用的校验和算法,用于验证信用卡号码。这是Java version

答案 1 :(得分:1)

您似乎正在尝试实施Luhn checkdigit algorithm

尝试使用LuhnCheckDigit()的apache commons Apache commons-validator library实用程序方法。

答案 2 :(得分:0)

您可能希望首先将整数拆分为数字:split int value into separate digits

答案 3 :(得分:0)

如果Blender的评论是正确的,你可以这样做:

int num=123; // or whatever
String str=Integer.toString(num);
int total=0;
if(str.length()>1){
    for(int i=0; i<str.length(); i++){
        total+=Integer.parseInt(str.charAt(i));
    }
}
System.out.println(total);

(我还没有运行,因此可能存在一些错误)

答案 4 :(得分:0)

我认为一个简单的方法就是

if (num1 > 9) num1 = num1-9

如果您查看原始数字乘以2之后的情况,这是有效的。

num  num*2  result
0    0      0
1    2      2
2    4      4
3    6      6
4    8      8
5    10     1
6    12     3
7    14     5
8    16     7
9    18     9

答案 5 :(得分:0)

我认为你计算总数的代码应该是

int totalSum = 0;
for (i=0; i<num.length; i+=2) {
    totalSum+=num[i+1];
    if (num[i+2]>4) {
        totalSum+=1+((num[i+2]*2) % 10); 
    } else {
        totalSum+=num[i+2]*2;
    }
}

这可以避免任何慢速的字符串转换。