将数字中的替代数字加倍并添加每个数字

时间:2014-01-20 11:29:28

标签: c#

我正在使用以下代码将数字中的替代数字加倍并添加每个数字,但它在c#中不起作用

int sum=0,r,number;

Console.WriteLine("Enter the number");
number = int.Parse(Console.ReadLine());
if (number % 2!= 0)
{
    number = number * 2;
    number++;
}

Console.WriteLine("numbers:" + number);
Console.ReadLine();

while (number!= 0)
{
    r = number % 10;
    number= number/ 10;
    sum = sum + r;
}

Console.WriteLine("sum of digits of the number:" + sum);
Console.ReadLine();

请帮助我。提前谢谢。

2 个答案:

答案 0 :(得分:0)

您正在寻找的是Luhn Algorithm我在这里为您复制的内容。 Luhn Algorithm - C#

Luhn算法使用最后一位(最右边的数字)作为checksum数字。因此,在我的第一次迭代中,我跳过它,因为在函数的第一部分中不需要它。

由于给定数字的长度可以变化,我使用int a检查我的位置,知道我应该加倍的数字以及我应该跳过的数字。

在此处详细了解Luhn Algorithm

using System;
public class Program {
public void Main()
{
    int sum=0,d;
    string  oNum  =  "79927398713";

    int  a  =  0;

    for(int  i  =  oNum.Length-2;  i>=0;i--)
    {
        d  =  Convert.ToInt32(oNum.Substring(i,1));
        if  (a  %  2  ==  0)  d  =  d*2;
        if  (d  >  9)  d  -=  9;
        sum  +=  d;
        a++;
    }

    if  ((10  -  (sum%10))  ==  Convert.ToInt32(oNum.Substring(oNum.Length-1)))
    {
        Console.WriteLine("Valid");
    }
    else
{
Console.WriteLine("Invalid");
}

    Console.WriteLine("sum of digits of the number:" + sum);
    }
}

控制台有三个地方写一行。对于任何给定的数字,其中至少有两个是可见的。您想要的行“sum of digits of the number:”将始终显示。

答案 1 :(得分:0)

正如StevieB所说的那样“你不会将替代数字增加一倍。如果原始数字是奇数,你的数字加倍并加1。然后你将数字的数字相加。”

以下代码应该适合您。我没有针对所有可能的情况对其进行测试,所以请这样做。

根据您的要求,稍微调整一下。

        Console.WriteLine("Enter a number:");
        char[] enteredNumber = Console.ReadLine().ToArray();
        int finalNumber = 0;

        for (int i = 0; i < enteredNumber.Count(); i++)
        {
            if (i % 2 != 0)//This condition might need tweeking
            { 
                finalNumber = finalNumber + (Convert.ToInt32(enteredNumber[i].ToString()) * 2);
            }
            else
            {
                finalNumber = finalNumber + Convert.ToInt32(enteredNumber[i].ToString());
            }
        }

        Console.WriteLine(finalNumber);