C# 从1#C创建2个数字

C# 从1#C创建2个数字,c#,C#,我应该从一个1中创建两个新数字,第一组将包含可被2整除的数字,另一组将包含其他数字 int checkCount = 94321, num1 = 94321, count2 = 0, countRest = 0; while (checkCount > 0) { if (checkCount % 2 == 0) count2++; else

我应该从一个1中创建两个新数字,第一组将包含可被2整除的数字,另一组将包含其他数字

int checkCount = 94321, num1 = 94321, count2 = 0, countRest = 0;

        while (checkCount > 0)
        {   
            if (checkCount % 2 == 0)
                count2++;
            else
                countRest++;
            checkCount /= 10;
        }

        int[] a = new int[count2];
        int[] b = new int[countRest];

        int k2 = 0, kRest = 0;

        for (int j = 0; j < a.Length + b.Length; j++) 
        {
            if (num1 % 2 == 0)
            {
                a[k2] = num1 % 10;
                k2++;
            }
            else
            {
                b[kRest] = num1 % 10;
                kRest++;
            }
            num1 /= 10;
        }
int checkCount=94321,num1=94321,count2=0,countRest=0;
而(支票计数>0)
{   
如果(检查计数%2==0)
count2++;
其他的
countRest++;
支票计数/=10;
}
int[]a=新的int[count2];
int[]b=新的int[countRest];
int k2=0,kRest=0;
对于(int j=0;j
我用我应该使用的数字创建了两个数组,现在当每个数组都包含数组中的所有数字时,如何构建两个INT varabile

例如: 如果我有这个号码-12345那么 var=24,其他var=135

如果您有另一个没有阵列的解决方案,我认为它会更好。 谢谢。

为什么不:

    int decimalMaskA = 1;
    int decimalMaskB = 1;
    while (checkCount > 0)
    {   
        if (checkCount % 2 == 0)
        {
            count2 = count2 + (checkCount % 10)*decimalMaskA;
            decimalMaskA *= 10;
        }
        else
        {
            countRest = countRest + (checkCount % 10)*decimalMaskB;
            decimalMaskB *= 10;
        }
        checkCount /= 10;
    }
count2
countRest
将包含这些数字(135和24),而不是计数

如何构建两个INT变量 当每一个都包含所有 数组中的数字是多少

我不能肯定,但我想你是在问,如果给定一个数字的每一个数字,如何按重要性的降序来组合一个数字

要“附加”数字,可以将数字乘以10,然后将数字相加。要创建“组合”编号,可以对数组中的每个数字执行此操作

int[] digits = ...
int num = digits.Aggregate(0, (numSoFar, digit) => 10 * numSoFar + digit);
作为一个循环,它看起来像:

int num = 0;

foreach(int digit in digits)
{
    num = 10 * num + digit;
}

如果我明白你在找什么,这就行了:

        //Setup a sample array
        int[] a = new int[2];
        a[0] = 2;
        a[1] = 4;

        //Convert each item to a string, convert that to a string array, join the strings and turn into an int
        int output = int.Parse(String.Join("", a.Select(s => s.ToString()).ToArray()));
这对我很有用:

int number = 12345;

string result1 = "";
string result2 = "";

string numberString = number.ToString();

for (int i = 0; i < numberString.Length; i++ )
{
    if (numberString[i] % 2 == 0)
    {
        result1 = result1 + numberString[i];
    }
    else
    {
        result2 = result2 + numberString[i];
    }
}

int evenNumbers = int.Parse(result1);
int oddNumbers = int.Parse(result2);
int number=12345;
字符串result1=“”;
字符串result2=“”;
字符串numberString=number.ToString();
for(int i=0;i
另一个解决方案可能是

var num1 = 94321;
var oddFinal = 0;
var evenFinal = 0;

var odd = new List<int>();
var even = new List<int>();

while( num1>0 )
{
    if( num1 % 2 == 0 )
        odd.Add( num1 % 10 );
    else
        even.Add( num1 % 10 );

    num1 = num1 / 10;
}    

for (int i = 0; i < odd.Count; i++)
{
    oddFinal += odd[i] * (int) Math.Pow(10,i);
}

for (int i = 0; i < even.Count; i++)
{
    evenFinal += even[i] * (int) Math.Pow(10,i);
}
var num1=94321;
var=0;
var=0;
var odd=新列表();
var偶数=新列表();
而(num1>0)
{
如果(num1%2==0)
奇数相加(num1%10);
其他的
偶数相加(num1%10);
num1=num1/10;
}    
for(int i=0;i
用LINQ试试这个

int num = 92345;
            string strNum = Convert.ToString(num);

            var divisibleby2 = from c in strNum
                               where int.Parse(c.ToString()) % 2 == 0
                               select c.ToString();

            var notDivisibleby2 = from c in strNum
                               where int.Parse(c.ToString()) % 2 != 0
                                  select c.ToString();

            int int_divisibleby2num = int.Parse(String.Join("", divisibleby2.ToArray()));
            int int_Notdivisibleby2num = int.Parse(String.Join("", notDivisibleby2.ToArray()));

这将数字12345拆分为数字135和24

int checkCount = 12345;
int even = 0;
int odd = 0;
int reverseEven = 0;
int reverseOdd = 0;

while (checkCount > 0) {
    int current = checkCount % 10;
    if (current % 2 == 0) {
        reverseEven = 10 * reverseEven + current;
    } else {
        reverseOdd = 10 * reverseOdd + current;
    }

    checkCount /= 10;
}


while (reverseEven > 0) {
    even = 10 * even + reverseEven % 10;
    reverseEven /= 10;
}

while (reverseOdd > 0) {
    odd = 10 * odd + reverseOdd % 10;
    reverseOdd /= 10;
}

Console.WriteLine("even: {0}", even);
Console.WriteLine("odd: {0}", odd);

每个程序员每天至少要写一次古怪的代码:

        int checkCount = 12345, numEven, numOdd;
        Boolean result;

        result = int.TryParse(checkCount.ToString().Replace("0", "").Replace("2", "").Replace("4", "").Replace("6", "").Replace("8", ""), out numOdd);
        result = int.TryParse(checkCount.ToString().Replace("1", "").Replace("3", "").Replace("5", "").Replace("7", "").Replace("9", ""), out numEven);

你能再举两个例子让我们看看有什么模式吗?你是想通过从两个不同的数字串中提取交替字符来构造一个数字串吗?@sergio-从629831中,你会得到628和931,从91822中,你会得到91和822@托拜厄斯-它不应该是一根绳子。。它应该是两个整数变量。@Luis:我仍然没有看到一个模式,看起来你在随机获取数字。我遗漏了什么吗?@Sergio-Lobbs&evens,从左到右……它们将包含数字531和42。很好的方法,但你从右到左得到它;)我需要42和531(如果号码是54321@Andrey:现在你有13500和2040。如果你想做对,你当前的方法需要两个掩码(和一个错误修复)。不过,我还是喜欢我自己的答案;)我尝试了两个掩码,但仍然不起作用。非常感谢,但经理的回答很好。:)@Luis它很好,但包含3个循环,而不是一个。顺便说一句,我把我的修好了。