2017-01-05 3 views
1

私はedx.orgでCS50コースを受講しています。それはコンピュータ科学入門と呼ばれています。長いロングナンバーから残渣をどのように分けるのですか?

私は第1週問題を解決しようとしています。だからユーザーがクレジットカード番号を入力し、それが有効かどうかをチェックするアルゴリズムを開発しなければならない。これを行うには、16桁の数字全体を数字に分割する必要があります。そして、私はここで立ち往生しています。私はループでこれを行う必要があると思います。各ステップの数字を数字で取得する必要があるので、ユーザーの入力を各ステップごとに10に分けて、何らかの形で残量を求めたかったのです。

intの保持できる桁数に制限があるため、タイプintに変換できません。この種の機能を実装するにはどうすればよいですか?私はこれを試しましたが、それが何にも通じないことに気付きました。少なくとも一見、。 cre_numはクレジット番号のままです。

long long check(long long cre_num) 
{ 
    double part, i; 

    for (i = 0.1; i <= 1; i = i+0.1) 
    { 
     if (cre_num/10 == i) 
     { 
      part = i; 
     } 
    } 
    return part; 
} 
+0

ありがとうございました!ありがとう、この種の実現を考えなかった。 –

+1

'long long'値' cre_num/10'は決して0.1から0.9までの範囲の 'double'値にはなりません。浮動小数点数が「0.1」の不正確なコーディングを必然的に9回追加すると浮動小数点数が「壊れている」ため、「*」は「1.0」に等しいかもしれませんが、ループの 'i'は決して' 1.0 ' 1.0に等しくなることを期待する。カード番号が1桁ずつ入力された場合:各桁を調べたい場合は、そのまま使用してください。 –

+0

cs50タグ –

答えて

3

16進数の数字(long int)をベクターに入れるか、またはその種類にする必要がありますか?

10によって、あなた%数は、あなたがこのように、それの最後の桁を取得する:あなたは%10あなたが最後の桁を取得し、あなたのベクトルに入れて、あなたよりもあれば、

13%10 = 3 
3%10 = 3 (03 = 3) 
523%10 = 3 

ので、/10は、/ 10が最後に保存した数字を削除するためです。

私が望むなら、私はそれをコード化しようとすることができますが、あなたはすでにそのようにしていると思います。

+0

まだ配列やベクトルについて何も聞いていないことが暗示されています。しかしそれは良いことです、ありがとうございました。私はすでにASCIIの周りで踊ることを提案していたので、それはここの鍵ですね。コードを書く必要はなく、ちょうどアイデアを探しました。もう一度ありがとう、素晴らしい一日を。 –

+0

ああ、大丈夫です。あなただけのアイデアをしたい場合は、私はあなたのデータを "格納"することを意味する2番目の部分を無視してください。素晴らしい一日=) –

関連する問題