## Siemens Interview Question

Software Engineer in Tests```
bool checkpalindrome(unsigned int num, int bitnum)
{
int loopcount = bitnum / 2;
unsigned int temp, temp2;
for (int i = 0; i < loopcount; i++)
{
bitnum -= 1;
temp = num >> i;
temp = temp & 1;
temp2 = num >> bitnum;
temp2 = temp2 & 1;
if (temp != temp2)
{
return false;
}
}
return true;
}
int main()
{
cout << checkpalindrome(0xFCA8153F,32);
getchar();
return 0;
```

This can be done by checking the starting nibbles and end nibbles and the sum of both should be 15(F). This should be true for all the nibbles till you cover all the nibbles.

```
#define IS_PALINDROME (num) !(num ^ ((num & (1 << 0 ) ) << 31 \
| (num & (1 << 1 ) ) << 29 \
| (num & (1 << 2 ) ) << 27 \
| (num & (1 << 3 ) ) << 25 \
| (num & (1 << 4 ) ) << 23 \
| (num & (1 << 5 ) ) << 21 \
| (num & (1 << 6 ) ) << 19 \
| (num & (1 << 7 ) ) << 17 \
| (num & (1 << 8 ) ) << 15 \
| (num & (1 << 9 ) ) << 13 \
| (num & (1 << 10 ) ) << 11 \
| (num & (1 << 11 ) ) << 09 \
| (num & (1 << 12 ) ) << 07 \
| (num & (1 << 13 ) ) << 05 \
| (num & (1 << 14 ) ) << 03 \
| (num & (1 << 15 ) ) << 01 \
| (num & (1 << 16 ) ) >> 1 \
| (num & (1 << 17 ) ) >> 3 \
| (num & (1 << 18 ) ) >> 5 \
| (num & (1 << 19 ) ) >> 7 \
| (num & (1 << 20 ) ) >> 9 \
| (num & (1 << 21 ) ) >> 11 \
| (num & (1 << 22 ) ) >> 13 \
| (num & (1 << 23 ) ) >> 15 \
| (num & (1 << 24 ) ) >> 17 \
| (num & (1 << 25 ) ) >> 19 \
| (num & (1 << 26 ) ) >> 21 \
| (num & (1 << 27 ) ) >> 23 \
| (num & (1 << 28 ) ) >> 25 \
| (num & (1 << 29 ) ) >> 27 \
| (num & (1 << 30 ) ) >> 29 \
| (num & (1 << 31 ) ) >> 31))
```

```
int reverse(unsigned int num)
{
unsigned int rev=0;
int s = sizeof(num) * 8;
while(num)
{
rev <<= 1;
rev |= num & 1;
num>>=1;
--s;
}
rev <<= s;
return rev;
}
void checkPalindrome(unsigned int number)
{
if(reverse(number)==number)
printf("Palindrome\n");
else
printf("Not Palindrome\n");
}
```

void palindrome_32bit_no()

{

unsigned long int x=0xFCA88ACF,A,B;

int i=0,flag=0;

for(i=0;i<16;i++)

{

A=(x & (unsigned long)pow(2.0, 32-i-1) );

B=(x & (unsigned long)pow(2.0, i) );

if((A && B)|| (!A && !B))

flag=1;

else

{

flag=0;

cout<<"\nThe no is not palindrome";

break;

}

}

if(flag==1)

cout<<"\nPalindrome";

}

```
bool checkpalindrome(unsigned int num, int bitnum)
{
int loopcount = bitnum / 2;
unsigned int temp, temp2;
for (int i = 0; i < loopcount; i++)
{
bitnum -= 1;
temp = num >> i;
temp = temp & 1;
temp2 = num >> bitnum;
temp2 = temp2 & 1;
if (temp != temp2)
{
return false;
}
}
return true;
}
int main()
{
cout << checkpalindrome(0xFCA8153F,32);
getchar();
return 0;
}
```

```
bool checkpalindrome(unsigned int num, int bitnum)
{
int loopcount = bitnum / 2;
unsigned int temp, temp2;
for (int i = 0; i < loopcount; i++)
{
bitnum -= 1;
temp = num >> i;
temp = temp & 1;
temp2 = num >> bitnum;
temp2 = temp2 & 1;
if (temp != temp2)
{
return false;
}
}
return true;
}
int main()
{
cout << checkpalindrome(0xFCA8153F,32);
getchar();
return 0;
```

```
bool checkpalindrome(unsigned int num, int bitnum)
{
int loopcount = bitnum / 2;
unsigned int temp, temp2;
for (int i = 0; i < loopcount; i++)
{
bitnum -= 1;
temp = num >> i;
temp = temp & 1;
temp2 = num >> bitnum;
temp2 = temp2 & 1;
if (temp != temp2)
{
return false;
}
}
return true;
}
int main()
{
cout << checkpalindrome(0xFCA8153F,32);
getchar();
return 0;
}
```

```
bool checkpalindrome(unsigned int num, int bitnum)
{
int loopcount = bitnum / 2;
unsigned int temp, temp2;
for (int i = 0; i < loopcount; i++)
{
bitnum -= 1;
temp = num >> i;
temp = temp & 1;
temp2 = num >> bitnum;
temp2 = temp2 & 1;
if (temp != temp2)
{
return false;
}
}
return true;
}
int main()
{
cout << checkpalindrome(0xFCA8153F,32);
getchar();
return 0;
```

```
bool checkpalindrome(unsigned int num, int bitnum)
{
int loopcount = bitnum / 2;
unsigned int temp, temp2;
for (int i = 0; i < loopcount; i++)
{
bitnum -= 1;
temp = num >> i;
temp = temp & 1;
temp2 = num >> bitnum;
temp2 = temp2 & 1;
if (temp != temp2)
{
return false;
}
}
return true;
}
int main()
{
cout << checkpalindrome(0xFCA8153F,32);
getchar();
return 0;
```

You could do this bit by bit or nibble by nibble...or even byte by byte (look up table)

- EveryoneLovesMicrosoft November 03, 2009