Luis
Luis

Reputation: 3277

Creating 2 numbers from a one #C

I should create two new numbers from a one, the first group will contain digits which are divisible by 2 and the other group will contain the others.

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;
        }

I created two arrays with the numbers I should use, now how can I build two INT varabile when each one contains all of the numbers together from the array?

Example: If I have this number - 12345 so var = 24, other var = 135

If you have another solution without arrays I think it will be better. Thank you.

Upvotes: 2

Views: 228

Answers (8)

cyberzed
cyberzed

Reputation: 2076

Another solution could be...

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);
}

Upvotes: 0

Martin
Martin

Reputation: 40365

Every programmer should write wacky code at least once a day:

        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);

Upvotes: 0

Andrey
Andrey

Reputation: 60085

Why not just:

    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 and countRest will contain those numbers (135 and 24) instead of counts.

Upvotes: 2

Priyank
Priyank

Reputation: 10623

Try this with 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()));

Upvotes: 0

mgronber
mgronber

Reputation: 3419

This splits number 12345 to numbers 135 and 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);

Upvotes: 1

Ani
Ani

Reputation: 113442

How can I build two INT varabile when each one contains all of the numbers together from the array?

I can't say for sure, but I think you're asking how to assemble a number given each of its digits in decreasing order of significance.

To 'append' a digit to a number, you can multiply the number by 10 and then add the digit to that. To create the 'assembled' number, you can perform this operation for each digit in the array,

int[] digits = ...
int num = digits.Aggregate(0, (numSoFar, digit) => 10 * numSoFar + digit);

As a loop, this would look like:

int num = 0;

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

Upvotes: 0

tobias86
tobias86

Reputation: 5029

This works for me:

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);

Upvotes: 0

Chris Haas
Chris Haas

Reputation: 55447

If I understand what you're looking for this will do the trick:

        //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()));

Upvotes: 0

Related Questions