Hassen Fatima
Hassen Fatima

Reputation: 423

How do I multiply a long integer with different numbers in C program?

I am very new to C programming and I am writing a program which takes a number which is suppose to be 9 digits long. After this I multiply each digit with either 1 or 2. I am using arrays to ask user to enter their numbers. I would like to know if there is a way to multiply those 9 numbers with different numbers as one integer instead of using arrays? Here is my code with arrays:

#include <stdio.h>

int main(void) {

    int sin_num[9];
    int num1;
    int num2, num11, num12;
    int num3, num4, num5, num6, num7, num8, num9, num10;



    for(num1=0; num1<9; num1++) {
            printf("Enter your SIN number one by one:");
            scanf("%d", &sin_num[num1]);
    }


    num2 = sin_num[0] * 1;
    num3 = sin_num[1] * 2;
    num4 = sin_num[2] * 1;
    num5 = sin_num[3] * 2;
    num6 = sin_num[4] * 1;
    num7 = sin_num[5] * 2;
    num8 = sin_num[6] * 1;
    num9 = sin_num[7] * 2;
    num10 = sin_num[8] * 1;

Right now I am doing this: element 1 * 1 element 2 * 2 element 3 * 1 But how can I do, lets say if I enter 123456789 multiply with different numbers:

123456789
121212121

Upvotes: 0

Views: 933

Answers (2)

Mutex202
Mutex202

Reputation: 43

Well I couldn't much understand what you were asking. Anyways hope this is what you are looking for.....

 #include<stdio.h>


 int main()
 {

   long int nine_digit_num;
   int step=100000000;
   int digit,input_num,i;

   printf("Enter 9 digit number:\n");
   scanf("%ld",&nine_digit_num);


   for(i=1;i<=9;i++)
   {  
     printf("Enter a number to multiply with the %d digit:\n",i);
     scanf("%d",&input_num);
     digit=nine_digit_num/step; // this and the next step are used to
     digit=digit%10;            // obtain the individual digits.
     printf("%d*%d=%d\n",digit,input_num,digit*input_num);
     step=step/10;
  }
   return 0;
 }

Upvotes: 2

ShadowRanger
ShadowRanger

Reputation: 155363

I'm sure there are Luhn algorithm solutions already written that you could reference, but I'm going to invent my own right now just to have a walkthrough.

Since your input is only 9 digits, it will fit in a plain 32 bit variable. I'll use unsigned on the assumption it's 32 bits or bigger, but for production code, you'd likely want to use inttypes.h uint32_t and associated scanf macros.

#include <stdio.h>

int main(void) {

    unsigned sin_num, checksum, digit;
    int i;

    printf("Enter your SIN as a 9 digit number using only digits:\n");
    if (scanf(" %9u", &sin_num) < 1) ... do error handling or just exit ...

    for (i = 0; sin_num; ++i) {
        digit = sin_num % 10;
        sin_num /= 10;
        if (i & 1) { // Double odd digits (might have this backwards; check me for your case
            digit *= 2;
            if (digit >= 10) digit = digit % 10 + digit / 10; // Luhn carry is strange
        }
        checksum += digit;
    }

    ... do whatever else you need to do ...

It's not a single mathematical operation because Luhn's carry is too weird for magic number tricks, but it's still much more straightforward than a bunch of single digit scanf calls and array storage.

Upvotes: 1

Related Questions