2017-03-28 2 views
0

私はC言語を新しくしていますので、これに対する答えが辛いことは謝ります! 2つの2D配列をループし、それに対応するインデックスメンバーをchineseRemainderルーチンの引数として渡します。つまり、各繰り返しに対して、array1 [i]とarray2 [i]はi = iのルーチンに渡されます。私はprintfへの呼び出しの出力が特定の数値のセットになることを期待しています - 代わりにすべて0になっています。ここで私はCR機能を呼び出すメインルーチンです。 **編集私はxpとxqに任意のint値を与えました。なぜなら、それらは問題ではないように思われ、そのような値を与えることで同じ出力が得られます。トラブルシューティングの便宜上Printfたくさんのゼロを出力する

int main(){ 

int xp, xq, p = 61, q = 3; 
int i, j; 

reverseInteger(); 

for(i = 0; i < 32; ++i){ 
    for(j = 0; j < 10; ++j){ 
     xq = 4; 
     xp = 1; 
     printf("%i\n", chineseRemainder(xq, xp, p, q)); 
      } 
     } 


return 0; 

} 

、私はそれらの割り当てを通じ行っていたことを確認するXQとXPの内容をダンプ:彼らがあります。問題はCRルーチンでなければなりません。なぜなら、それが整数セットを渡してもゼロを出力しているからです。したがって、関数とその依存関係は次のようになります。

float power(int base, int exp) { 

int i; 
float result = 1; 

if (exp == 0) 
    result = 1; 

else if (exp == 1) 
    result = base; 

else if(exp > 1){ 
    for (i = 0; i < exp; ++i) 
     result *= base; 
} 

else 
    result = 1/power(base, -exp); 

return result; 

} 

float powerMod(int q, int e, int p){ 

float result; 

result = (int)power(q, e) % p; 

return result; 

} 

typedef struct arrayInside{ 

     int array[30][10]; 

    } arrayInside;    

arrayInside codesInside;    

struct arrayInside reverseInteger(){ 

int i, j, number; 

for(i = 0; i < 30; ++i){ 
    j = 10; 
    number = (aryConversion(q3[i], 3)); 
    do { 
     codesInside.array[i][j-1] = number % 10; 
     --j; 
     number = number/10; 
    } 
    while (number); 
    codesInside.array[i][0] = 0; 

}; 

return codesInside; 
} 

int chineseRemainder(int xq, int xp, int p, int q){ 

int tp; 
int ceiling = (p*q-1)/2; 

tp = ((int)(q * (powerMod(q, -1, p))*xp + p * powerMod(p, -1, q) * xq) % (p*q)); 
    if(tp > ceiling) 
      tp-=p*q; 

return tp; 

} 
+0

これは完全な例ではありません。 –

+2

あなたはchineseRemainder()が問題であることを知っています。いくつかの入力例をトレースし、どこが間違っているのかを見てみましょう。 – jakeehoffmann

+0

Antti、何がもっと役立つでしょうか? – LeftWingHegelian

答えて

1

chineseRemainderは実際には常に0を返します。これを見てください -

((int)(q * (powerMod(q, -1, p))*xp + p * powerMod(p, -1, q) * xq) % (p*q)); 

powerMod(q、-1、p)はゼロです。したがって、乗算して加算するとゼロになります。あなたの関数は実際にゼロを返します。何も悪いことはありません。おそらくロジックをチェックしたり、データタイプを変更する必要があります。

関連する問題