在C程序中,如何将一个长整数与不同的数相乘?
我对C语言编程非常陌生,我正在写一个程序,这个程序需要一个9位数的数字。在此之后,我将每个数字乘以1或2。我使用数组要求用户输入他们的数字。我想知道是否有办法将这9个数字与不同的数字相乘为一个整数,而不是使用数组?以下是我的数组代码:在C程序中,如何将一个长整数与不同的数相乘?,c,arrays,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,
#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;
我相信已经有一些Luhn算法的解决方案可以参考,但我现在就要发明自己的解决方案,只是为了进行一次演练 由于您的输入仅为9位数字,因此它将适合普通32位变量。我将使用
unsigned
,假设它是32位或更大,但对于生产代码,您可能希望使用inttypes.h
uint32\u 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 ...
#包括
内部主(空){
无符号sinu_num,校验和,数字;
int i;
printf(“以9位数字形式输入SIN,仅使用数字:\n”);
如果(scanf(“%9u”,&sin_num)<1)…执行错误处理或退出。。。
对于(i=0;sin_num;++i){
数字=单数%10;
sin_num/=10;
如果(i&1){//两个奇数位数(可能是倒过来的;请检查我以了解您的情况)
数字*=2;
如果(数字>=10)数字=数字%10+数字/10;//卢恩进位奇怪
}
校验和+=数字;
}
…做任何你需要做的事情。。。
这不是一个单一的数学运算,因为Luhn的进位对于数字魔术来说太奇怪了,但它仍然比一堆个位数的
scanf
调用和数组存储简单得多。我确信已经有Luhn算法解写出来了,你可以参考,但我现在就要发明自己的算法只是为了进行一次演练
由于您的输入只有9位,它将适合一个普通的32位变量。我将使用unsigned
,假设它是32位或更大,但对于生产代码,您可能希望使用inttypes.h
uint32\u 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 ...
#包括
内部主(空){
无符号sinu_num,校验和,数字;
int i;
printf(“以9位数字形式输入SIN,仅使用数字:\n”);
如果(scanf(“%9u”,&sin_num)<1)…执行错误处理或退出。。。
对于(i=0;sin_num;++i){
数字=单数%10;
sin_num/=10;
如果(i&1){//两个奇数位数(可能是倒过来的;请检查我以了解您的情况)
数字*=2;
如果(数字>=10)数字=数字%10+数字/10;//卢恩进位奇怪
}
校验和+=数字;
}
…做任何你需要做的事情。。。
这不是一个单一的数学运算,因为Luhn的进位对于数字魔术来说太奇怪了,但它仍然比一堆个位数的
scanf
调用和数组存储简单得多。我确信已经有Luhn算法解写出来了,你可以参考,但我现在就要发明自己的算法只是为了进行一次演练
由于您的输入只有9位,它将适合一个普通的32位变量。我将使用unsigned
,假设它是32位或更大,但对于生产代码,您可能希望使用inttypes.h
uint32\u 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 ...
#包括
内部主(空){
无符号sinu_num,校验和,数字;
int i;
printf(“以9位数字形式输入SIN,仅使用数字:\n”);
如果(scanf(“%9u”,&sin_num)<1)…执行错误处理或退出。。。
对于(i=0;sin_num;++i){
数字=单数%10;
sin_num/=10;
如果(i&1){//两个奇数位数(可能是倒过来的;请检查我以了解您的情况)
数字*=2;
如果(数字>=10)数字=数字%10+数字/10;//卢恩进位奇怪
}
校验和+=数字;
}
…做任何你需要做的事情。。。
这不是一个单一的数学运算,因为Luhn的进位对于数字魔术来说太奇怪了,但它仍然比一堆个位数的
scanf
调用和数组存储简单得多。我确信已经有Luhn算法解写出来了,你可以参考,但我现在就要发明自己的算法只是为了进行一次演练
由于您的输入只有9位,它将适合一个普通的32位变量。我将使用unsigned
,假设它是32位或更大,但对于生产代码,您可能希望使用inttypes.h
uint32\u 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 ...
#包括
内部主(空){
无符号sinu_num,校验和,数字;
int i;
printf(“以9位数字形式输入SIN,仅使用数字:\n”);
如果(scanf(“%9u”,&sin_num)<1)…执行错误处理或退出。。。
对于(i=0;sin_num;++i){
数字=单数%10;
sin_num/=10;
如果(i&1){//两个奇数位数(可能是倒过来的;请检查我以了解您的情况)
数字*=2;
如果(数字>=10)数字=数字%10+数字/10;//卢恩进位奇怪
}
校验和+=数字;
}
…做任何你需要做的事情。。。
这不是一个单一的数学运算,因为Luhn的进位对于数字魔术来说太奇怪了,但它仍然比一堆个位数的
scanf
调用和数组存储简单得多。我不太明白你在问什么。无论如何,希望这就是你想要的
#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;
}
#包括
int main()
{
长整数九位数;
int step=100000000;
整数位数,输入_num,i;
printf(“输入9位数字:\n”);
scanf(“%ld”和九位数);
因为(i=1;i嗯,我不太明白你在问什么。无论如何,希望这是什么