如何在C程序中将长整数乘以不同的数字?

时间:2015-09-29 22:36:08

标签: c arrays

我是C编程的新手,我正在编写一个程序,它取一个数字,假设长度为9位。在此之后,我将每个数字乘以1或2.我使用数组来要求用户输入他们的数字。我想知道是否有办法将这9个不同数字的数字乘以一个整数而不是使用数组?这是我的数组代码:

#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;

现在我这样做: 要素1 * 1 元素2 * 2 元素3 * 1 但是我该怎么办,让我说如果我输入123456789乘以不同的数字:

123456789
121212121

2 个答案:

答案 0 :(得分:2)

好吧,我无法理解你在问什么。无论如何希望这是你正在寻找的.....

 #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;
 }

答案 1 :(得分:1)

我确定已经编写了Luhn算法解决方案,您可以参考,但我现在要创建自己的,只是为了进行演练。

由于您的输入仅为9位数,因此它将适合普通的32位变量。假设它是32位或更大,我会使用unsigned,但对于生产代码,您可能希望使用inttypes.h uint32_t并关联scanf宏。

#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 ...

这不是一个单一的数学运算,因为Luhn的携带对于魔术数字技巧来说太奇怪了,但它仍然比一堆单个数字scanf调用简单得多和阵列存储。