C# 如何从两个不同的数字中提取数字并形成新的数字
我这里有以下问题:我的输入是几行2位数字,我需要使用第一个数字的第二位和下一个数字的第一位来生成一个新数字。 例如:C# 如何从两个不同的数字中提取数字并形成新的数字,c#,C#,我这里有以下问题:我的输入是几行2位数字,我需要使用第一个数字的第二位和下一个数字的第一位来生成一个新数字。 例如: int-linesOfNumbers=Convert.ToInt32(Console.ReadLine()); 对于(inti=0,i,如您所述,如果您已经拥有两个数字,并且它们始终是有效的两位数整数,那么下面的代码应该适合您 var num1 = 12; var num2 = 22; var result = (num2 / 10)*10 + (num1 % 10); num
int-linesOfNumbers=Convert.ToInt32(Console.ReadLine());
对于(inti=0,i,如您所述,如果您已经拥有两个数字,并且它们始终是有效的两位数整数,那么下面的代码应该适合您
var num1 = 12;
var num2 = 22;
var result = (num2 / 10)*10 + (num1 % 10);
num2/10
返回第二个数字的第一个数字,num1%10
返回第一个数字的第二个数字。我希望这个代码片段能帮助您组合数字。模运算符(%)的意思是:53/10=5 Rest3
此示例显示了数字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);
}
boolean reading=true;
列表编号=新的ArrayList();
边读
{
尝试
{
int number=Convert.ToInt32(Console.ReadLine());
如果(编号>9&&编号<100)编号,则添加(编号);
else reading=false;//如果没有2位数字,则退出读取过程
}
捕获(例外情况除外)
{
//通过键入字符而不是数字来离开阅读过程;
阅读=错误;
}
}
如果(numbers.Count()>1)
{
组合列表=新的ArrayList();
对于(int i=1;i您可以使用string方法.Substring(..)
来实现您想要的
如果要将int转换与用户输入结合使用,可以执行以下操作:
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));
还有其他解决方案,如子字符串等,上面已经给出了许多解决方案。我通过LINQ给出了解决方案,请注意,这不是有效的,建议仅用于学习目的
int numA = 12;
int numB = 21 ;
string secondPartofNumA = numA.ToString().Select(q => new string(q,1)).ToArray()[1]; // first digit
string firstPartofNumB = numB.ToString().Select(q => new string(q,1)).ToArray()[0]; // second digit
string resultAsString = secondPartofNumA + firstPartofNumB;
int resultAsInt = Convert.ToInt32(resultAsString);
Console.WriteLine(resultAsString);
Console.WriteLine(resultAsInt);
%和/符号是你的救世主
如果你想要一个数字的“一”位(我们称之为X),只需做X%10——剩下的将是“一”位中的任何数字。(23%10=3)
相反,如果数字是两位数,而您需要“十”位数,则将其除以十。(19/10=1)
要合并它们,请将您希望位于“十”位的数字乘以十,然后将另一个数字(2*10+2=22)我喜欢,但我认为您在注释中提供的示例输入缺少一些内容。我还将指出代码中的一些错误
首先,如果您只获得了输入12,23,34,45
,那么您不需要调用控制台。在for
循环中读取。您已经获得了输入,不需要再获得更多(从您描述的内容)
其次,除非您在进行数学运算,否则不需要将数字数据存储为int
s,将其作为字符串保存,尤其是在这种情况下。(我的意思是,在数据库中,邮政编码不是作为数字存储的,而是作为字符串存储的。)
现在,进入代码。您获得数据的方法是正确的:
var listOfNumbers = Console.ReadLine();
此时,listOfNumbers
等于“12,23,34,45”
。如果您将该变量作为字符串进行迭代,则将使用每个单独的字符,包括逗号。要获取要操作的每个数字,需要使用
这会将该列表转换为四个不同的两个字符的数字(以字符串形式)。现在,您可以对它们进行迭代,但在对每个字符串中的字符进行操作时,不必担心将它们转换为数字。此外,您还需要一个结果集合来将所有内容放入其中
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]);
}
添加一些您正在测试的示例。示例输入:12、23、34、45输出应为:22、33、44。首先转换为字符串,然后提取所需的字符。然后使用int.Parse
或convert.ToInt32
int-linesOfNumbers=convert.ToInt32(Console.ReadLine());
不会返回数组。因此for循环无法工作。您真正的输入是什么?您是否通过一个单独的控制台来查询每个数字。ReadLine()
?或者您的输入是像12233445
这样的单行还是像12,23,34,45
这样的逗号分隔的单行?还有,您的示例输入是什么?行数是否包含两个数字?第一个数字
和第二个数字
?这对于LINQ来说根本没有什么用处。这是极少数情况之一当LINQ的可读性较低时。这方面的性能也将非常糟糕。虽然一个新学生肯定应该知道何时以及如何使用LINQ,但他们也应该知道何时不使用它。已经使用子字符串和其他方法添加了一些答案,因此,为了展示我添加的另一种方法。我同意LINQ可能会出现r对于初学者来说可能很复杂,但对其他读者可能会有所帮助。因此,为了增加答案的多样性,由于答案已经添加,我将其呈现出来。我希望您删除否决票,因为这会带来伤害:(最好了解神奇数字34
和12
的来源。)(问题中提供的除外)为了让这个问题更具可读性。我也不明白你为什么在初始化firstNumber
时要做-=
。我选择了问题中两个以外的其他数字,因为12和21不实用,因为一个数字是另一个数字的翻页版本。所以我用34替换了21。你的第二个参数……该死,你是对的。我会解决这个问题。可以理解。我的第一点是,我的意思是,你应该演示如何将数字输入34
和12
。好的@krillgar。我已经编辑了我的答案。现在它也提供了一个阅读过程。谢谢!这是一个初学者问题,最好不要留下任何未解释的内容。:)这很好,但是我如何为循环的两个独立实例执行它呢
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]);
}
Console.WriteLine(string.Join(",", results));