2016-05-12 6 views
0

以下のコードの目的は、ユーザーが入力した変数(aとc)を乗算し(a * c)、この数の要因を見つけて、これらの要素のどれが別のユーザー入力変数この場合、b)。何らかの理由で、正しくコンパイルされていないため、なぜその理由が理解できません。コマンドcout << sum1 << endl << sum2 << endl;を使用しようとすると、予想外の番号が表示されます。私のコードに何か問題があると誰かに教えてもらえますか?これは、関数内で作成されたsum1とsum2の値をmainに返すvoid funtionです。変数a、b、c、f []はすべてmainで定義されています。ここでは関数宣言がある:サイズを変数で定義した配列変数の代入を取得するには?

void findFactors(int, int, int, int[], int&, int&); 

と機能自体:誰も私を助けることができる場合

void findFactors(int a, int b, int c, int f[], int& sum1, int& sum2) 
{ 
    int j=0; 
    int mult=a*c; 
    int i, z=j, temp; 

    for(i=1; i<=mult; i++) 
    { 
     if(mult%i==0) 
     { 
      f[j]=i; 
      j++; 
     } 
    } 

    for(j=0; j>=0; j--) 
    { 
     temp=mult/f[j]; 
     if(temp+f[z]==b || temp-f[z]==b || f[z]-temp==b) 
     { 
      sum1 = f[z]; 
      sum2 = temp; 
     } 
    } 
} 

、それをいただければ幸いです。感謝:)

この機能は、あなたがそれを期待してどのように取り組んでいるが、変数 bためのこれらの条件が満たされない限り、その後、 sum1sum2は決してセットを取得されていない、と彼らはしている場合は、 sum1がすべき場合
+0

も機能 – Smeeheey

+2

を使用してコードを共有してくださいする必要があります(J = 0; j>は= 0; jの - )'ループは、それだけでありません最初のループの後に 'j'が' -1'なので一度実行しますか? – BackDoorNoBaby

+0

関数に渡される 'f'配列の大きさはどれくらいですか? – Barmar

答えて

1
void findFactors(int a, int b, int c, int f[], int& sum1, int& sum2) 
{ 
    int j=0; 
    int mult=a*c; 
    int i, z=j, temp; // here z == 0 

    for(i = 1; i <= mult; i++) 
    { 
     if(mult % i == 0) 
     { 
     f[j] = i; // Any # % 1 == 0, so f[0] = 1 
     j++;  // note: z is still == 0 here 
     } 
    } 

    for(j = 0; j >= 0; j--) // This loop executes only once 
    { 
     temp = mult/f[j]; // f[0] == 1, so temp == mult here 
     // since z==0 here, f[0] == 1 
     // so only if: b == (temp + 1) || (temp - 1) || (1 - temp) 
     if(temp + f[z] == b || temp - f[z] == b || f[z] - temp == b) 
     { 
     sum1 = f[z]; // z is still 0, so f[0] is 1, sum1 == 1 
     sum2 = temp; // temp == mult here, so sum2 == mult 
     } 
    } 
} 

わかりません1に設定されていること、およびのためになぜ `sum2tempまたはmult

関連する問題