我是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
答案 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
调用简单得多和阵列存储。