我正在使用以下代码将数字中的替代数字加倍并添加每个数字,但它在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();
请帮助我。提前谢谢。
答案 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);