Credit: 課題
課題は、クレジットカードの発行元とチェックディジットを使って正しいクレジットカード番号が入力されているかを確認するプログラムを書くこと。
https://cs50.harvard.edu/x/2021/psets/1/credit/
Credit: 回答例
#include <cs50.h>
#include <math.h>
#include <stdio.h>
int main(void)
{
// Promt for input
long n;
do
{
n = get_long("Number: ");
}
while (n < 0);
// Calculate checksum
int checksum = 0;
// 2nd digit
checksum += (((n / 10) % 10) * 2) / 10;
checksum += (((n / 10) % 10) * 2) % 10;
// 4th digit
checksum += (((n / 1000) % 10) * 2) / 10;
checksum += (((n / 1000) % 10) * 2) % 10;
// 6th digit
checksum += (((n / 100000) % 10) * 2) / 10;
checksum += (((n / 100000) % 10) * 2) % 10;
// 8th digit
checksum += (((n / 10000000) % 10) * 2) / 10;
checksum += (((n / 10000000) % 10) * 2) % 10;
// 10th digit
checksum += (((n / 1000000000) % 10) * 2) / 10;
checksum += (((n / 1000000000) % 10) * 2) % 10;
// 12th digit
checksum += (((n / 100000000000) % 10) * 2) / 10;
checksum += (((n / 100000000000) % 10) * 2) % 10;
// 14th digit
checksum += (((n / 10000000000000) % 10) * 2) / 10;
checksum += (((n / 10000000000000) % 10) * 2) % 10;
//16th digit
checksum += (((n / 1000000000000000) % 10) * 2) / 10;
checksum += (((n / 1000000000000000) % 10) * 2) % 10;
// 1st digit
checksum += n % 10;
// 3rd digit
checksum += (n / 100) % 10;
// 5th digit
checksum += (n / 10000) % 10;
// 7th digit
checksum += (n / 1000000) % 10;
// 9th digit
checksum += (n / 100000000) % 10;
// 11th digit
checksum += (n / 10000000000) % 10;
// 13th digit
checksum += (n / 1000000000000) % 10;
// 15th digit
checksum += (n / 100000000000000) % 10;
// Identify credit card issuer
if (checksum % 10 == 0 && (n / 1000000000000000) % 10 == 5
&& (n / 100000000000000) % 10 >= 1
&& (n / 100000000000000) % 10 <= 5)
{
printf("MASTERCARD\n");
}
else if (checksum % 10 == 0 && (n / 1000000000000) % 10 == 4)
{
printf("VISA\n");
}
else if (checksum % 10 == 0 && (n / 1000000000000000) % 10 == 4)
{
printf("VISA\n");
}
else if (checksum % 10 == 0 && (n / 100000000000000) % 10 == 3 && (n / 10000000000000) % 10 == 4)
{
printf("AMEX\n");
}
else if (checksum % 10 == 0 && (n / 100000000000000) % 10 == 3 && (n / 10000000000000) % 10 == 7)
{
printf("AMEX\n");
}
else
{
printf("INVALID\n");
}
}
未希 諒
Related posts
About media
Ramps Blog は、ノマドによるノマドのためのブログです。日本、香港、シンガポール、タイ、台湾のノマド生活を通じて見えた景色、特に食、カルチャー、テクノロジー、ビジネス、アート、デザインなどについて発信しています。
Recent Posts
安曇野放牧豚を豪快にバンズに挟んだハンバーガーはスーパーナイス!|三六五+二(367)〈松本十帖〉 https://ramps.jp/restaurant/matsumoto-jujo-367-lunch-super-nice-burger/
絶品。
#ハンバーガー #旅行好きな人と繋がりたい #写真好きな人と繋がりたい #ランチ
「INUA」部門シェフによる宿泊客限定の朝食|三六五+二(367)〈松本十帖〉 https://ramps.jp/restaurant/matsumoto-jujo-367-breakfast/
朝食のコンセプトは「ヘルシー&コンシャス」。『ALPS BAKERY』で焼き上げたパンの他、野菜をたっぷりの朝食を堪能。
#旅行好きな人と繋がりたい
#旅行
#写真撮ってる人と繋がりたい
#グルメ旅
「INUA」の部門シェフによる薪火ダイニングのローカルガストロノミー|三六五+二(367)〈松本十帖〉
http://ramps.jp/restaurant/mat…
このレストランを目的に旅をする価値がある。
#ローカルガストロノミー
#noma
#発酵
#ホテルレストラン
#グルメ旅
#ホテル
【ホテル宿泊記】松本十帖|地域活性化の拠点を担うホテルのスイートルーム〈松本・浅間温泉〉 http://ramps.jp/hotel/matsumot…
松本十帖のスイートルームの全貌を紹介。ただ一言、最高だった!
#旅行好きな人と繋がりたい
#写真好きな人と繋がりたい
#写真で伝える私の世界
#ホテル
#旅行記