1

アンドロイド 2.3.3

2 つ以上の数値の LCM を計算するプログラムを作成しましたが、うまくいきました。探している方の参考になればと思い、シェアさせていただきました。これは最善の解決策ではないかもしれませんが、私の要件に従って実行しました。必要に応じて変更できます。

入力をハードコーディングしました。また、プログラムは ArrayLists を使用して操作を行います。これらを変更したい場合があります。

前提条件 ::: 1. 入力範囲の PrimeNumbers の計算。

public class PlusMinusActivity extends Activity implements OnClickListener {
    /** Called when the activity is first created. */

    EditText edtxtExpression;
    Button btnLCM, btnGCD;

    ArrayList<String> alPrimes = new ArrayList<String>(); // Contains List of Prime Numbers
    ArrayList<String> alNumbers = new ArrayList<String>(); // Contains the input => Numbers for which LCM is to be determined
    ArrayList<String> alResult = new ArrayList<String>(); // Contains the numbers that make up the LCM


    String strExp = ""; // Temporary String to display the result

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);


        edtxtExpression = (EditText)findViewById(R.id.edtxtExpression);
        btnLCM = (Button)findViewById(R.id.btnLCM);
        btnGCD = (Button) findViewById(R.id.btnGCD);

        btnLCM.setOnClickListener(this);
        btnGCD.setOnClickListener(this);

        addData();

        strExp = alNumbers.toString();
        System.out.println("strExp Value is ::: "+strExp);
    }




    private void addData() {
        // TODO Auto-generated method stub


        //alPrimes.add(String.valueOf(1));
        alPrimes.add(String.valueOf(2));
        alPrimes.add(String.valueOf(3));
        alPrimes.add(String.valueOf(5));
        alPrimes.add(String.valueOf(7));
        alPrimes.add(String.valueOf(9));
        alPrimes.add(String.valueOf(11));
        alPrimes.add(String.valueOf(13));
        alPrimes.add(String.valueOf(17));
        alPrimes.add(String.valueOf(19));
        alPrimes.add(String.valueOf(23));
        alPrimes.add(String.valueOf(29));


        alNumbers.add(String.valueOf(1));
        alNumbers.add(String.valueOf(5));
        alNumbers.add(String.valueOf(7));
        alNumbers.add(String.valueOf(9));

        System.out.println("alPrimes ::: "+alPrimes.toString());
        System.out.println("alNumbers ::: "+alNumbers.toString());

    }




    @Override
    public void onClick(View v) {
        // TODO Auto-generated method stub


        switch (v.getId()) {
        case R.id.btnLCM:
            calculateLCM();
            break;

        case R.id.btnGCD:
            calculateGCD();
            break;
        default:
            break;
        }

    }


    // Calculates LCM
    private void calculateLCM() {
        // TODO Auto-generated method stub

        int i=0, count=0;

        while(i < alPrimes.size()) 
        {
            count = 0;
            int p = Integer.parseInt(alPrimes.get(i)); // Getting the element from PrimeNumbers List
            System.out.println("Prime Number ::: "+p);
            int j=0;

            while(j < alNumbers.size())
            {
                int n = Integer.parseInt(alNumbers.get(j)); // Getting the number from Input List
                System.out.println("Number ::: "+n);

                if(n % p == 0 && n != 1)
                {
                    count++; // Counts the number of integers that gets divided (% = 0) by that particular prime number
                    System.out.println("Count :::"+count);
                }

                j++;
            }


            if(count >= 2) // If two or more numbers, gets divided, then we do the division
            {
                alResult.add(String.valueOf(p)); // adding the prime number to Result list
                System.out.println("Result ::: "+alResult.toString());

                j=0;

                while(j < alNumbers.size())
                {

                    int n = Integer.parseInt(alNumbers.get(j));
                    System.out.println("Number ::: "+n);


                    if(n % p == 0)
                    {
                        int result = n/p;
                        System.out.println("Temp Result ::: "+result);

                        alNumbers.remove(j); // Replace the element by the result
                        System.out.println("After Removing ::: "+alNumbers.toString());
                        alNumbers.add(j, String.valueOf(result));
                        System.out.println("After Adding ::: "+alNumbers.toString());
                    }

                    j++;
                }

                i = -1; // iterate the Input list from the start
            }

            else if(count == 0 || count == 1)
            {
                boolean allPrimes = checkAllPrimes();

                if(allPrimes)
                {
                    break;
                }
            }


            i++;
        }


        calculateResult();


    }

    // Calculates the result 
    private void calculateResult() {
        // TODO Auto-generated method stub

        int i=0;

        while(i < alNumbers.size())
        {
            alResult.add(alNumbers.get(i));
            i++;
        }

        int result = 1;
        i=0;

        while(i < alResult.size())
        {
            result *= Integer.parseInt(alResult.get(i));
            i++;
        }

        edtxtExpression.setText("LCM of "+strExp+" is ::: "+result);
    }



    // Checks whether the elements in the ArrayList are all prime numbers
    // returns true if all are prime
    //
    private boolean checkAllPrimes() {
        // TODO Auto-generated method stub

        int i=0;
        boolean areAllPrimes = true;

        while(i < alNumbers.size())
        {
            int n = Integer.parseInt(alNumbers.get(i));

            if(! (alPrimes.contains(n) || n == 1))
            {
                areAllPrimes = false;
                break;
            }

            i++;
        }


        return areAllPrimes;
    }




    private void calculateGCD() {
        // TODO Auto-generated method stub

    }

}

プログラムの出力

次の入力の場合 :::

alNumbers.add(String.valueOf(10));
alNumbers.add(String.valueOf(15));
alNumbers.add(String.valueOf(20));
alNumbers.add(String.valueOf(25));

異なる入力による出力

次の入力の場合 :::

alNumbers.add(String.valueOf(10));
alNumbers.add(String.valueOf(15));
alNumbers.add(String.valueOf(20));
alNumbers.add(String.valueOf(25));
alNumbers.add(String.valueOf(110));
alNumbers.add(String.valueOf(130));

6 つの値の出力

私はAndroidとJavaも初めてです。したがって、これが適切な解決策ではない場合でも、気にしないでください。

それが役に立てば幸い...

4

2 に答える 2

1

このアイデアを使用して、おそらくコードを単純化できます。

    static int ggt(int a, int b)
    {
        if (b == 0)
            return a;
        return ggt(b, a % b);
    }

    static void Main(string[] args)
    {
        int lcm = 1;

        foreach(int x in new int[] { 1,5,7,9 })
            lcm = x * lcm / ggt(x, lcm);

        Console.WriteLine("{0}", lcm);
    }

構文は c# ですが、十分に読み込めることを願っています。'ggt' は 'gcd' (最大公約数) のドイツ語の略語です。

于 2012-12-30T10:44:07.877 に答える