如何从两个不同的数字中取数字并形成一个新的数字

时间:2017-09-30 13:51:40

标签: c#

我在这里遇到以下问题:我的输入是几行2位数字,我需要使用第一个数字的第二个数字和下一个数字的第一个数字来创建一个新数字。 例如:

int linesOfNumbers = Convert.ToInt32(Console.ReadLine());
for(int i = 0,i<linesOfNumbers,i++)
{
     int numbers = Conver.ToInt32(Console.ReadLine());
     //that's for reading the input
}

我知道如何将数字分成数字。我的问题是如何合并它们。 例如,如果输入为12和21,则输出应为22​​。

6 个答案:

答案 0 :(得分:1)

我希望此代码段可以帮助您合并您的号码。模运算符(%)表示:53/10 = 5休息 3

此示例显示数字34和12的计算

int firstNumber = 34 - (34 % 10) // firstNumber = 30
int secondNumber = 12 % 10; // secondNumber = 2
int combined = firstNumber + secondNumber; // combined = 32

编辑(添加阅读和输出代码)

boolean reading = true;
List<int> numbers = new ArrayList();
while(reading)
{
    try
    {
        int number = Convert.ToInt32(Console.ReadLine());
        if (number > 9 && number < 100) numbers.Add(number);
        else reading = false; // leave reading process if no 2-digit-number
    }
    catch (Exception ex)
    {
        // leave reading process by typing a character instead of a number;
        reading = false;
    }
}

if (numbers.Count() > 1)
{
    List<int> combined = new ArrayList();
    for (int i = 1; i <= numbers.Count(); i++)
    {
        combined.Add((numbers[i-1] % 10) + (numbers[i] - (numbers[i] % 10)));
    }

    //Logging output:
    foreach (int combination in combined) Console.WriteLine(combination);
}

答案 1 :(得分:1)

您可以使用字符串方法.Substring(..)来实现您想要的效果。

如果您希望将int-conversion与用户输入结合使用,则可以执行以下操作:

int numA = 23;
int numB = 34;
int resultAB = Convert.ToInt16(numA.ToString().Substring(1, 1) + numB.ToString().Substring(0, 1));


另一种选择是将用户输入作为字符串值,然后将其转换为:

string numC = "12";
string numD = "21";
int resultCD = Convert.ToInt16(numC.Substring(1, 1) + numD.Substring(0, 1));

答案 2 :(得分:1)

我喜欢oRole's answer,但我认为他们错过了您在评论中提供的示例输入的一些内容。我还会指出代码中的一些错误。

首先,如果您仅提供输入12,23,34,45,则无需在Console.ReadLine循环内拨打for。您已经获得了输入,您不再需要(根据您所描述的内容)。

其次,除非您正在进行数学运算,否则无需将数值数据存储为int s,将其保留为string,尤其是在这种情况下。 (我的意思是你不将邮政编码作为数字存储在数据库中,而是将其存储为字符串。)

现在,进入代码。您有正确的方法来获取数据:

var listOfNumbers = Console.ReadLine();

此时,listOfNumbers等于"12,23,34,45"。如果您将该变量作为字符串进行迭代,则您将获取每个单独的字符,包括逗号。要获取每个号码,您需要使用string.Split

var numbers = listOfNumbers.Split(',');

这会将该列表转换为四个不同的两个字符数字(以字符串形式)。现在,您可以迭代它们,但是当您对每个字符串中的字符进行操作时,您不必担心将它们转换为数字。此外,您还需要一个结果集来将所有内容放入其中。

var results = new List<string>();

// Instead of the regular "i < numbers.Length", we want to skip the last.
for (var i = 0; i < numbers.Length - 1; i++)
{
    var first = numbers[i];
    var second = numbers[i + 1]; // This is why we skip the last.

    results.Add(first[1] + second[0]);
}

现在,您的results是数字"22""33""44"的集合。要将它们恢复为单个字符串,可以使用辅助方法string.Join

Console.WriteLine(string.Join(",", results));

答案 3 :(得分:0)

正如您所提到的,如果您已经有两个数字,并且它们总是有效的两位数整数,则以下代码应该适合您。

var num1 = 12;
var num2 = 22;
var result = (num2 / 10)*10 + (num1 % 10);

num2/10返回第二个数字的第一个数字,num1 % 10返回第一个数字的第二个数字。

答案 4 :(得分:0)

%和/符号是你的救世主。

如果你想要一个数字的'1'数字(我们称之为X),只需做X%10 - 余数将是'ones'数字中的任何数字。 (23%10 = 3)

如果数字是两位数而你想要“十位”数字,则除以10。 (19/10 = 1)。

要合并它们,请将您想要的数字乘以“十位”数字,然后将另一个数字加到它上面(2 * 10 + 2 = 22)

答案 5 :(得分:-1)

还有其他解决方案,如子串等,许多人已经在上面给出了它。我正在给出解决方案VIA LINQ,注意这个效率不高,建议仅用于学习目的

{{1}}