2016-10-04 25 views
0

数値の合計を一桁左になるまで再帰的に計算することになっている問題を解決しようとしています。私のプログラムは2つの非常に特殊なテストで失敗します(10^15)桁です。ロジックは小さな入力(< 10^15)のために働いています。ここで数値大文字の小文字の小文字の和

は私のコードは

所望の出力の形式は

import sys 
test_cases=int(input()) 

number_single=list(range(0,10)) 

while(test_cases!=0): 
    digit_sum=0 
    summation1=0 
    summation2=0 
    sub_case=int(input()) 

    while(sub_case!=0): 
     length,number=map(int,sys.stdin.readline().split()) 
     summation=length*number 
     summation1+=summation 

     sub_case=sub_case-1 
     digit_sum,digit_sum1=summation1,summation1 



      while(digit_sum not in number_single): 
      digit1_sum=digit_sum%10 
      digit_sum=int(digit_sum/10) 
      digit_sum=digit1_sum+digit_sum 

      print(digit_sum) 
    test_cases=test_cases-1 
ある数は17654、出力は他の理解の欠如5.

+0

ようこそStackOverflow。ヘルプドキュメントの投稿ガイドラインを読み、それに従ってください。 [最小、完全で検証可能な例](http://stackoverflow.com/help/mcve)がここに適用されます。コードを投稿して問題を正確に記述するまでは、効果的にお手伝いすることはできません。具体的には、すべての関連情報を転記に含める必要があります。つまり、4つのリンクはすべて無効です(アクセスが拒否されました)。 – Prune

+0

まず、コードは実行されません。インデントが正しくありません。クリーンなロジックが欠けていることを考えると、あなたが意図したことは本当に分かりません。たとえば、3つの入力コマンドがある場合、1つだけが保証されているように見えます。入力の量を入力し、必要に応じて入力そのものを入力するのでしょうか? – Prune

+0

1つのプロセスに対して2つの合計ループがあるのはなぜですか? – Prune

答えて

1

でされている場合、私はいくつかの基本的なを提供しますと言いますあなたの余分なデザインのいくつかをクリアするのに役立つコード。

まず、これは数字の「デジタルルート」と呼ばれます。このプロセスの古い用語は「キャスティング・ナイン」です。これは、剰余演算子をどうする些細です:

target = 314159265358979323846364338327950197169 

dig_root = target % 9 
if dig_root == 0: 
    dig_root = 9 
print ("digital root", dig_root) 

をただし、あなたが数字を追加した「手動」プロセスを介して動作することになっている場合、その言語の型機能を利用。文字列に変換し、各文字を1桁の整数に変換して追加します。合計は、これは私が使用していなかったためproblem.Theのテストケースが渡されていませんでした解決した

while target > 9: 
    target = sum([int(c) for c in str(target)]) 
    print (target) 
0

に減少し、リストの内包を使用していない以上

9より
while target > 9: 
    target_str = str(target) 
    target = 0 
    for c in target_str: 
     target += int(c) 
print (target) 

になるまで繰り返しますフロア区切り(//)ではなく、通常の除算を行い、整数結果を取っていました。これは、2つの大きなケースでプログラムが失敗する原因となりました。