gpt4 book ai didi

c - 无法理解循环中的值如何工作

转载 作者:行者123 更新时间:2023-11-30 20:33:37 25 4
gpt4 key购买 nike

我尝试在week2之后为cs50 pset1的问题编写代码:credit.c(更舒服)。我的代码如下。问题是“sumx”和“sumy”只是 0,因此“sum”始终等于 0。因此,每当我给出正确的信用卡号时,它都会转到新行,程序结束。我该如何解决这个问题?为什么“sumx”和“sumy”没有按照算法计算得出各自的总和?

我的代码是:

#include <cs50.h>     
#include <stdio.h>

int main(void){

long long i;
do{
printf("Your credit card number:\n");
i = get_long_long();
}
while(i < 4e12 || i > 5.5e15);
int count = 0;
int n;
long long c = i;

while(i != 0){
n = i%10;
i = i/10;
count++;
}
int x[count];

for(int j = 0; j < count; j++){
x[j] = c%10;
i = c/10;
}

int sumx = 0;

for(int j = 0; j < count - 1; j += 2){
x[j] = x[j] * 2;
sumx = sumx + x[j];
printf("%i", sumx);
}

int sumy = 0;

for(int j = 0; j < count; j += 2){
sumy = sumy + x[j];
}

int sum;
sum = sumx + sumy;

if(sum%10 == 0){
if((count == 15 && x[14] == 3) && (x[13] == 4 || x[13] == 7)){
printf("AmEx\n");
}
else if((count == 16 && x[15] == 5) && (x[14] > 1 || x[14] < 5)){
printf("MASTERCARD\n");
}
else if((count == 13 && x[12] == 4) || (count == 16 && x[15] == 4)){
printf("VISA\n");
}
}
else{
printf("Invalid Number\n");
}

return 0;
}

最佳答案

//#include <cs50.h>     
#include <stdio.h>

int main(void){

long long i=4111111111111111;
//Master: 5105105105105100;//16
//visa: 4111111111111111
printf("%lld\n",i);

//~ do{
//~ printf("Your credit card number:\n");
//~ i = get_long_long();
//~ }
//~ while(i < 4e12 || i > 5.5e15);


int count = 0;
long long c = i;
int k=0;
int x[100];//

while(c != 0){
x[k] = c%10;
c = c/10;
printf("%lld\n",c);
count++;
k++;
}

//k==count
printf("count:%d\n",count);
printf("k:%d\n",k);

// x[i] contains all the digits of credit card
printf("print x[i]\n");
for (int i=0;i<count;i++){
printf("%d ",x[i]);
}

printf("\n");


int addsum=0,x2prod=0;

for (int j=0; j<k; j+=2 ){
addsum += x[j];
}

printf("addsum:%d\n",addsum);



for (int j=1; j<k; j+=2 ){
if ( (2 * x[j]) > 9 ){ //have 2 digit
x2prod += (2 * x[j]) / 10;
x2prod += (2 * x[j]) % 10;
}
else // have one digit
x2prod += 2 * x[j];
}


printf("x2prod:%d\n",x2prod);

int sum;

sum = addsum + x2prod;


printf("\nsum: %d\n",sum);

if(sum%10 == 0){
if((count == 15 && x[14] == 3) && (x[13] == 4 || x[13] == 7)){
printf("AmEx\n");
}
else if((count == 16 && x[15] == 5) && (x[14] > 1 || x[14] < 5)){
printf("MASTERCARD\n");
}
else if((count == 13 && x[12] == 4) || (count == 16 && x[15] == 4)){
printf("VISA\n");
}
}
else{
printf("Invalid Number\n");
}

return 0;
}

我对您的代码进行了一些更正,将所有信用卡数字存储在第一个 while()x[] 数组中。

我仅使用三个示例检查了代码输出,顺便说一句,这不是一个可靠的版本,请 try catch 任何错误。

当您阅读我的评论时,我对此一无所知,但通过执行简单搜索此 link

告诉我该怎么做并按照你的方式解码它。

关于c - 无法理解循环中的值如何工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44733240/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com