Hi,
I have a little problem. I need to write a function that will be given a number (with unknown number of digits) and it will search the number for similar neighboring digits.

I must say that I'm not allowed to use arrays (unfortunately).
I thought of disassembling the number to it's digits in a loop, but i don't have a clue how it's possible...

please help...

Are you allowed to use strings? If you can, you could get input in the form of a string and cycle through that, comparing each character along the way, and then convert it to a number afterwards (if necessary at all).

The only other thing I can think of working is if you managed some very tricky work with the modulus operator.

Thanks for the reply. Unfortunately I'm not allowed to use strings as well. but i think i got it:

READ: NOT TESTED...YET.

#include <stdio.h>
#include <conio.h>

int findSim(int num)
{
  int i,u,t;
  for(i=num;i>=0;i/10)
  {
    u=num%10;
    t=(num/10)%10;
    num=num/10;
    if(u==t)
    printf("There are two similar digits in the number");
    else printf("There are no similar digits in the number");
  }
   return 0;
}

int main()
{
 int num;
 clrscr();
 printf("Enter a number:");
 scanf("%d",&num);
 
 findSim(num);
 
 getch();
 return 0;
}

You're on the right track. If you can't use an array, you can just assign variables for each digit.

Here's an example of how to handle 0-4 digits.

#include <stdio.h>

int main() {
  unsigned long n;   //let's the number be rather large
  int i, zero, one, two, three, four; 
  n=134434;
  zero=one=two=three=four=0;
  printf("\n\n");

  while(n) {
    i = n % 10;
    if(i==4) four++;
    else if(i==3) three++;
    else if(i==2) two++;
    else if(i==1) one++;
    else if(i==0) zero++;
    n /= 10;  //(n = n / 10;  //do this, last in the loop
  }

  if(zero>1) printf("\n I have %d zeroes", zero);
  if(one>1) printf("\n I have %d ones", one);
  if(two>1) printf("\n I have %d twos", two);
  if(three>1) printf("\n I have %d threes", three);
  if(four>1) printf("\n I have %d fours", four);


  printf("\n\n\t\t\t     press enter when ready");

  i = getchar();
  return 0;
}

Hey ...
try this
#include<stdio.h>
#include<conio.h>
void main()
{
int n,x,y,c=0,temp;
clrscr();
printf("Enter the number: ");
scanf("%d",&n);
temp=n;
while(n!=0)
{
x=n%10;
c=c*10+x;
y=n/10;
n=y;
}
printf("Reverse of the number is: %d\n",c);
if(c==temp)
printf("Numbers are same");
else
printf("Numbers are not same");
getch();
}

Your original code was pretty good, but it does not change the value of "i" (i/10 doesn't do anything). It should be i = i/10 or i /= 10 (which is not as readable).

printf() needs a newline "\n" in it.

Also the function should return immediately when a match is found

if(u==t) {
      printf("There are two similar digits in the number\n");
      return 1;
    }
  }
  printf("There are no similar digits in the number\n");
  return 0;
}

For debugging, try printing the values of u and t inside the loop.
If it still doesn't work right, post the results that you get, and describe why you think it is wrong.

Edited 6 Years Ago by UncleLeroy: Code was mis-spelled

This article has been dead for over six months. Start a new discussion instead.