views:

797

answers:

4

Hello everyone, i'm new to programming.. and i'm stuck at a problem.. I want my program to identify the separate digits in a given number, like if i input 4692, it should identify the digits and print 4 6 9 2. And yeah, without using arrays.. Thanks in advance!

+21  A: 

A perfect recursion problem to tackle if you're new to programming...

4692/1000 = 4

4692%1000 = 692

692/100 = 6

692%100 = 92

92/10 = 9

92%10 = 2

You should get the idea for the loop you should use now, so that it works for any number. :)

Suvesh Pratapa
4692%1000 = 692, not 2.4692/1000 = 4, not 469.
chocojosh
Yeah, +1 your answer is good because it leads to the answer rather than just solving the homework, but please correct your numbers!
Jason Cohen
The problem with typing too fast, is I type faster than I think sometimes. ;) Corrected!
Suvesh Pratapa
This works fine, unless there is a zero!
micmoo
A: 

Haven't written C code in year, but this should work.

int i = 12345;

while( i > 0 ){
   int nextVal = i % 10;
   printf( "%d", nextVal );
   i = i / 10;
}
Babak Naffas
This is completely wrong. You print the value of `i` 5 times: "123451234123121". Even if you print `nextVal` instead of `i`, you're doing it in the wrong order and will print "54321".
Jacob
A: 

Here is a simple solution if you want to just print the digits from the number.


#include 
/**
 printdigits
*/
void printDigits(int num) {

  char buff[128] = "";
  sprintf(buff, "%d ", num);
  int i = 0;
  while (buff[i] != '\0') {
     printf("%c ", buff[i]);
     i++;
   }
  printf("\n");
}
/*
 main function
*/
int main(int argc, char** argv) {
   int digits = 4321;
   printDigits(digits);
   return 0;
}

rjoshi
You don't need 128 characters to print an integer. Also, why initialize `buff` if you're just going to overwrite it with `sprintf()` later? Also, why do you have `char *p` if you never use it?
Chris Lutz
ya, earlier I was planning to iterate using pointer so I have char *p.Regarding size, he did not mentioned length of numbers so to be on safe size, used 128.
rjoshi
An `int` can only hold numbers up to 4 billion on most platforms, so you should be safe with 10 digits (11 characters with the nul-terminator). If you're worried about 64-bits, that's still only around 20 to 25 characters.
Chris Lutz
A: 

I think the idea is to have non reapeating digits printed (otherwise it would be too simple)... well, you can keep track of the already printed integers without having an array encoding them in another integer.

some pseudo C, to give you a clue:

int encoding = 0;
int d;

while (keep_looking()) {
  d = get_digit();
  if (encoding/(2**d)%2 == 0) {
    print(d);
    encoding += 2**d;
  }
}
fortran
What is `d**2`? I think you mean `d*d`.
pmg
ouch, sorry, I meant 2**d
fortran
in fact, I meant some kind of "Gödelization"...
fortran
If I remember right, `**` is Fortran's exponentiation operator. C doesn't have an exponentiation operator. You may replace ``2**d`` with ``1 << d``.
pmg
fortran