Flare Cat - 6 months ago 21

Java Question

In my computer science class, we were assigned a lab on recursion in which we have to print out a number with commas separating groups of 3 digits.

Here is the text directly from the assignment (the method has to be recursive):

Write a method called printWithCommas that takes a single nonnegative

primitive int argument and displays it with commas inserted properly.

No use of String.

For example printWithCommas(12045670); Displays 12,045,670

printWithCommas(1); Displays 1

I am really stumped on this. Here is my code so far:

`public static void printWithCommas(int num) {`

//Find length

if (num < 0) return;

int length = 1;

if (num != 0) {

length = (int)(Math.log10(num)+1);

}

//Print out leading digits

int numOfDigits = 1;

if (length % 3 == 0) {

numOfDigits = 3;

}

else if ((length+1) % 3 == 0) {

numOfDigits = 2;

}

System.out.print(num / power(10,length-numOfDigits));

//Print out comma

if (length > 3) {

System.out.print(',');

}

printWithCommas(num % power(10,length-numOfDigits));

}

It gets a stack overflow (which I can fix later), but it fails to print out some of the zeros, specifically the ones that are supposed to be after each comma.

I feel like I am taking this on with a completely wrong approach, but can't think of a good one. Any help would be appreciated.

Thanks in advance!

Note:

`power`

Answer

Here is the code I came up with, for anyone else that might be stuck on this:

```
public static void printWithCommas(int num) {
if (num > 999) {
printWithCommas(num/1000);
System.out.print(',');
if (num % 1000 < 100) System.out.print('0');
if (num % 1000 < 10) System.out.print('0');
System.out.print(num%1000);
}
else {
System.out.print(num);
}
}
```