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;
}
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.
Mình nghĩ đoạn này ổn mà. Đoạn trên đã bắt đầu từ i=1 do viết ngược.
Ah, em sai rồi :’(
Sửa cmt thôi…
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
Giờ đã rõ lí do, câu
scanf
này SAI vì %d chỉ dành choint
thôi.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
Bạn nhập số kiểu long long, do vậy không thể dùng %d được.
Xem ở đây.