01/10/2018, 12:16

Cần giúp đỡ chương trình thuật toán thẻ tín dụng credit.c

NGUON https://docs.cs50.net/problems/credit/credit.html#correctness
de bai la:
nhap so the kieu du lieu la long long
vi du 378282246310005

nhan 2 cac so bat dau tu so dung thu 2 cuoi cung la 0 bo qua so dung ke den so tiep theo

7•2 + 2•2 + 2•2 + 4•2 + 3•2 + 0•2 + 0•2

duoc

14 + 4 + 4 + 8 + 6 + 0 + 0

so nao co 2 chu so thi tach ra thanh 2 so 1 chu so

1 + 4 + 4 + 4 + 8 + 6 + 0 + 0 = 27

sau do dem cong voi cac so con lai khong thuc hien nhan 2

27 + 3 + 8 + 8 + 2 + 6 + 1 + 0 + 5 = 60

neu tong cuoi cung duoc so chia het cho 10 thi thoa man

xet them truong hop neu so the so cac chu so la 16 va dau the bat dau tu 51 den 55
vi du 51xxxxxxxxxxx or 55xxxxxxxxxxxxxx
thi la the MasterCard

con the VISA co 13 va 16 chu so va dau the bat dau bang 4
vd 4xxxxxxxxxxxxx

DAY LA CODE CUA MINH NO CHAY DUOC NHUNG CHO KET QUA SAI

#include<stdio.h>

//THE CO BAO NHIEU CHU SO
int length(int CNumber)
{
    int counter = 0;
    while (CNumber > 0)
    {

        counter++;

        CNumber = CNumber / 10;
    }
    return counter;
}
int main(void)

{

long long cardnumber;

//NHAP SO THE

do{
printf("Card Number: ");
scanf("%d",&cardnumber);
}while( cardnumber < 0 );

long long b=cardnumber;
int i,c=length(cardnumber),sum1=0,sum2=0;

int number[c];

//TACH CAC SO RA CHO VAO TUNG PHAN TU CUA MANG 
		for(i=0;i<c;i++)
		{
		number[i]=b%10;
		b=b/10;
		}

//TINH TONG1 TU SO DUNG THU 2 CUOI CUNG
for( i=1;i<c;i=i+2)
{
if(2 * number[i] < 9) {
	sum1 = sum1 + number[i]*2;
} else sum1 = sum1 + 1 + ( 2 * number[i] - 10 );
}

//TONG 2 TU SO CUOI CUNG 
for(i=0;i<c;i=i+2)
{ sum2 = sum2 + number[i];
} 
int sum =sum1 + sum2;

//XAC DINH THE CO HOP LE VA THUOC LOAI THE NAO VISA HOAC MASTERCARD
if ( sum % 10 == 0 )
    {   
         if ( cardnumber >= 5100000000000000 && cardnumber < 5600000000000000 )
            
printf("MASTERCARD
");
        
else if ( (cardnumber >= 4000000000000 && cardnumber < 5000000000000) || (cardnumber >= 4000000000000000 && cardnumber < 5000000000000000) )
            printf("VISA
");
        else
            printf("INVALID
");
    }
    else
        printf("INVALID
");

    return 0;
}
HK boy viết 14:20 ngày 01/10/2018

Lần sau viết tiếng Việt có dấu, và bạn không cần phải dịch đề bài sang tiếng Việt đâu.

rogp10 viết 14:22 ngày 01/10/2018

Đoạn này sai. Vừa nãy bạn vừa cộng các chữ số number[i | i = 2k], bây giờ phải cộng các chữ số number[i | i = 2k+1] mới đúng.

Mình nghĩ đoạn này ổn mà. Đoạn trên đã bắt đầu từ i=1 do viết ngược.

HK boy viết 14:32 ngày 01/10/2018

Ah, em sai rồi :’(

Sửa cmt thôi…

Trung Tran viết 14:23 ngày 01/10/2018

ai chạy hộ mình chương trình này cái chạy mãi vẫn ra kết quả sai
chương trình này ngắn gọn hơn

#include <stdio.h>

int main (void)
{
long long i, xadd, x2;
int addsum, x2prod, sum;

// get user's CC number ;)
do
{
    printf("Your credit card number, please:\n");
    scanf("%d",&i);
}
while ( i < 0 );       

// sum every other digit starting w/ the the last
for ( xadd = i, addsum = 0; xadd > 0; xadd /= 100 )
    addsum += xadd % 10;

// double every other digit starting w/ 2nd to last
// then sum the individual digits of these products
for ( x2 = i / 10, x2prod = 0; x2 > 0; x2 /= 100 )
{
    if ( 2 * (x2 % 10) > 9 )
    {
        x2prod += (2 * (x2 % 10)) / 10;
        x2prod += (2 * (x2 % 10)) % 10;
    }
    else
        x2prod += 2 * (x2 % 10);
}

sum = addsum + x2prod;

// check to see if the CC number is in the appropriate range
if ( sum % 10 == 0 )
{   
    if ( (i >= 340000000000000 && i < 350000000000000) || (i >= 370000000000000 && i < 380000000000000) )
        printf("AMERICAN EXPRESS\n");
    else if ( i >= 5100000000000000 && i < 5600000000000000 )
        printf("MASTERCARD\n");
    else if ( (i >= 4000000000000 && i < 5000000000000) || (i >= 4000000000000000 && i < 5000000000000000) )
        printf("VISA\n");
    else
        printf("INVALID\n");
}
else
    printf("INVALID\n");

return 0;}
rogp10 viết 14:32 ngày 01/10/2018

Giờ đã rõ lí do, câu scanf này SAI vì %d chỉ dành cho int thôi.

Trung Tran viết 14:19 ngày 01/10/2018

thế dùng % gì thế hay nhập thế nào hả bạn tại mình tưởng số nguyên dùng mỗi %d nên nhập

HK boy viết 14:17 ngày 01/10/2018

Bạn nhập số kiểu long long, do vậy không thể dùng %d được.

Xem ở đây.

Bài liên quan
0