6933/25421化成最简单的分子式得多少?(用程序实现)

解决方案 »

  1.   

    procedure TForm1.Button1Click(Sender: TObject);
    var
      i, j, tmpGCD: Integer;  function getGCD(A, B: integer): integer;
      var
        temp: integer;
      begin
        while A mod B <> 0 do
          begin
            temp := B;
            B := A mod temp ;
            A := temp;
          end;
        Result := B
      end;
    begin
      i := 6933;
      j := 25421;
      tmpGCD := getGCD(i, j);  ShowMessage(IntToStr(i div tmpGCD) + '/' + IntToStr(j div tmpGCD));
    end;
      

  2.   

    const
      C_Size = 18;
      C_pure: array [0..C_Size -1] of Integer = (2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61);//最大公约数
    function func2(a, b: Integer): Integer;
    var
      I: Integer;
    begin
      I := 0;
      Result := 1;
      while ((I < C_Size) and (C_pure[I] div 2 < a) and (C_pure[I] div 2 < b)) do
      begin
        while (a mod C_pure[I] = 0) and (b mod C_Pure[I] = 0) do
        begin
          Result := Result * C_Pure[I];
          a := a div C_Pure[I];
          b := b div C_Pure[I];
        end;
        Inc(I);
      end;
    end;procedure TForm1.Button1Click(Sender: TObject);
    var
      a, b, c: Integer;
    begin
      a := 6933;
      b := 25421;
      c := func2(a, b);
      showmessage(format('%d/%d = %d/%d(%d)', [a, b, a div c, b div c, c]));
    end;
      

  3.   

    临时做了一个,还有不完善的地方,但大致思想已经反映了。procedure TForm1.Button2Click(Sender: TObject);
    var
     s,s1,s2 :string;
     i1,i2 : integer;
    begin  s := edit1.Text ; //edit1.text为84/90 or 10/5之类的分数
      s1 := copy(s,1,PosEx('/',s)-1);
      s2 := copy(s,PosEx('/',s)+1,length(s)-PosEx('/',s));
      i1 := StrToInt(s1);
      i2 := strtoint(s2);
      wudi(i1,i2);
      s := inttostr(i1)+'/'+inttostr(i2);
      Caption := s;
    end;procedure TForm1.wudi(var s1, s2: integer);
    var
     i : integer;
    begin
       if (s1 mod s2) = 0 then
       begin
         s1 := s1 div s2;
         s2 := s2 div s2;
         exit;
       end;
       if (s2 mod s1) = 0 then
       begin
         s2 := s2 div s1;
         s1 := s1 div s1;     exit;
       end;      for I := 9 downto 2 do
          begin
            if ((s1 mod i)=0) and ((s2 mod i)=0) then
            begin
              s1 := s1 div i;
              s2 := s2 div i;
              wudi(s1,s2);
              Break;
            end;
          end;
    end;
      

  4.   

    碾转相除法 得到最大公约数
    function G(x,y:Integer):Integer ;
    begin
       while x<>y do
       begin
            if x>y  then  x:=x-y else y:=y-x;
       end;
       Result:=y;
    end;