## Hacking with ANSI C signal Handling

```\$sudo strace -e trace=signal -p 1
Process 1 attached
kill(4659, SIGTERM)                     = 0
kill(4659, SIGCONT)                     = 0

```
```\$gcc crtlc1-p1.c
\$./a.out
Hello world
Hello world
Hello world
Hello world
Hello world
Hello world
Hello world
Hello world
Hello world
^Ci got a signal 2
Hello world
Hello world
^C
\$cat crtlc1-p1.c
#include
#include
#include

void ouch(int sig)
{

printf("i got a signal %d\n",sig);
(void) signal(SIGINT, SIG_DFL);
}

int main()
{

(void) signal(SIGINT,ouch);

while(1)
{
printf("Hello world \n");
sleep(1);
}
}
\$

```

## How to write an algorithm to find among natural numbers the sum of multiples of 3 and 5 below 1000 ?

```/* This program has been worked on from http://www.s-anand.net/euler.html */

#include <stdio.h>

sofmul()
{
int n, i;
n = 0;

for (i = 0 ; i < 1000 ; i++) {
if ( !(i % 5) || !(i % 3) )
n = n + i;
}

printf("Sum of the multiples of 3 and 5 below 1000 is %d \n", n);
}
```

## How to write a program to multiply a number by 4 using a bitwise operator ?

```/* Part of this program copied from http://www.sanfoundry.com/c-program-multiply-number-4-using-bitwise-operators/ */

#include <stdio.h>

multbitwise()
{

long number;
printf("Enter an integer: ");
scanf("%ld",&number);
number = number << 2;
printf("Result is %ld \n",number);
}

/* http://stackoverflow.com/questions/4456442/interview-multiplication-of-2-integers-using-bitwise-operators */
/* http://www.geeksforgeeks.org/multiply-two-numbers-without-using-multiply-division-bitwise-operators-and-no-loops/ */
/* http://en.wikipedia.org/wiki/Bitwise_operation */
```

## Hacking with conversions of decimal and binary

```\$./app
Sign detection 
Power of two 
Counting No. of bits set 
Set or clear bits without branching
Find maximum value
Finding least common multiple
Finding the greatest commom divisor
Finding if a number is an Armstrong number or not
Finding if a given number is prime number
Finding the number of twin prime numbers
Finding if a number is palindrome or not
Finding prime factor of a number
Finding the value of M^N
Finding factorial of a number
Finding the sum of the series 1! + 2! +...+N! 
Finding the sume of the series 1 + 2 +...+N 
Finding Parity of an Integer 
Finding the biggest among three numbers 
Finding the sum of even and odd numbers up to a number N 
Finding the sum and number of integers divisible by 5 
Swapping Values 
Finding the decimal value for a binary 
Finding the reverse of an integer 
Finding a way for user authentication :
Finding the binary equivalent of a decimal number and count no. of 1's in binary number 
Option: 25
Enter a decimal integer
25
Input number is 25
It's binary equivalent is 11001
No. of 1s in the binary number is 3
\$./app
Sign detection 
Power of two 
Counting No. of bits set 
Set or clear bits without branching
Find maximum value
Finding least common multiple
Finding the greatest commom divisor
Finding if a number is an Armstrong number or not
Finding if a given number is prime number
Finding the number of twin prime numbers
Finding if a number is palindrome or not
Finding prime factor of a number
Finding the value of M^N
Finding factorial of a number
Finding the sum of the series 1! + 2! +...+N! 
Finding the sume of the series 1 + 2 +...+N 
Finding Parity of an Integer 
Finding the biggest among three numbers 
Finding the sum of even and odd numbers up to a number N 
Finding the sum and number of integers divisible by 5 
Swapping Values 
Finding the decimal value for a binary 
Finding the reverse of an integer 
Finding a way for user authentication :
Finding the binary equivalent of a decimal number and count no. of 1's in binary number 
Option: 22
Enter a binary number : 11001
The binary number is : 11001
It's decimal equivalent is:  25
\$

```

## How to write an algorithm to reverse an integer ?

```/* Part of this work is copied from http://www.sanfoundry.com/c-program-to-reverse-a-given-number/ */

#include <stdio.h>

revint()
{

long num, reverse = 0, temp, remainder;
printf("Enter the number \n");
scanf("%ld",&num);
temp = num;
while ( num > 0 )
{
remainder = num % 10;
reverse = reverse * 10 + remainder;
num /= 10;
}
printf("Given number = %ld \n", temp);
printf("It's reverse = %ld \n", reverse);
}

/* http://stackoverflow.com/questions/15349723/reversing-an-integer-in-java-using-a-for-loop */
/* http://math.stackexchange.com/questions/480068/how-to-reverse-digits-of-an-integer-mathematically */

```

## Hacking with an algorithm to reverse an integer

```\$./app
Sign detection 
Power of two 
Counting No. of bits set 
Set or clear bits without branching
Find maximum value
Finding least common multiple
Finding the greatest commom divisor
Finding if a number is an Armstrong number or not
Finding if a given number is prime number
Finding the number of twin prime numbers
Finding if a number is palindrome or not
Finding prime factor of a number
Finding the value of M^N
Finding factorial of a number
Finding the sum of the series 1! + 2! +...+N! 
Finding the sume of the series 1 + 2 +...+N 
Finding Parity of an Integer 
Finding the biggest among three numbers 
Finding the sum of even and odd numbers up to a number N 
Finding the sum and number of integers divisible by 5 
Swapping Values 
Finding the decimal value for a binary 
Finding the reverse of an integer 
23
Enter the number
47124907242424245782424578
Given number = 9223372036854775807
It's reverse = 7085774586302733229
\$

```

## How to write an algorithm to do a binary to decimal conversion ?

```/* part of work copied from http://www.sanfoundry.com/c-program-binary-number-into-decimal/ */
#include <stdio.h>

btd()
{
int num, binary_val, decimal_val = 0, base = 1, rem;
printf("Enter a binary number : ");
scanf("%d",&num);
binary_val = num;
while ( num > 0 )
{
rem = num % 10;
decimal_val = decimal_val + rem * base;
num = num / 10;
base = base * 2;
}
printf("The binary number is : %d \n",binary_val);
printf("It's decimal equivalent is: %d \n",decimal_val);
}

/* http://numbermonk.com/ */
/* remainder -- a part that is still to come to make things perfect
(or make something working fully) */
/* http://www.mathsisfun.com/definitions/remainder.html */
/* "num" is considered as a number which has to be broken
into 10 pieces beacuse the resulting number is built
using a maximum of 10 building blocks.
```

## How to write an algorithm to swap values ?

```/* part of work copied from http://www.sanfoundry.com/c-program-swap-values/ */
#include <stdio.h>

swap_values()
{
int temp;
int *ptr1, *ptr2;
int a, b;
printf("Enter integer values to be swapped: ");
scanf("%d %d",&a,&b);
ptr1 = &a;
ptr2 = &b;
temp = *ptr1;
*ptr1 = *ptr2;
*ptr2 = temp;
printf("Swapped values are: %d %d \n",a,b);
}

/* http://www.programmingsimplified.com/c-program-swap-two-numbers */
/* http://betterexplained.com/articles/swap-two-variables-using-xor/ */
/* http://www.science.unitn.it/~fiorella/guidelinux/tlk/node27.html */

```