我尝试在第2周后为cs50 pset1&#39的问题编写代码:credit.c(更舒服)。我的代码如下。问题是' sumx'和' sumy'只是0,因此'总和'总是等于0.所以每当我给出正确的信用卡号码时,它就会转到新的行和程序结束。我怎样才能解决这个问题,以及为什么要解决这个问题。和' 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;
}
答案 0 :(得分:0)
func test_A() {
let array = [Dog(), Cat(), Snoopy()] as [Animal]
array.forEach() {
$0.hello()
}
// Bark!
// Meow!
// Zzz..
}
func sayHello<T: Animal>(_ x: T) {
x.hello()
}
func test_B() {
sayHello(Dog())
sayHello(Cat())
sayHello(Snoopy())
// Bark!
// Meow!
// Zzz..
}
我对您的代码进行了一些更正,将//#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;
}
数组中的所有信用卡号码存储在x[]
中。
我只用三个样本检查了代码输出,顺便说一下这不是一个可靠的版本,试着捕获任何错误。
当您阅读我的评论时,我对此一无所知,但通过执行简单搜索link
告诉我该怎么做并按照你的方式解码它。