to zswang(伴水)(需要充充电) 
师傅你不想出国吗?
去充电啊?@_@to Linux2001(准备升级中...) 
//kick 

解决方案 »

  1.   

    to goalitaly(座中足彩谁赔多,钱塘朱朱青衫湿-朱朱):
    你的名字真有意思.
      

  2.   

    师傅在吗~~~~~~~~~~~
    调试通过了,可是怎么这么麻烦啊?function calc(mNumberA:string;mNumberB:string):string;
    Var
      i,j,K:integer;
      s1,s2:string;
    begin
      i:=length(mNumberA);
      j:=length(mNumberB);
      if i>j then
        begin
          result:='';
          s1:='0';
          while j>0 do //判断 mNumberB的字符串是否加完
            begin
              k:=strtoint(mNumberA[i])+strtoint(mNumberB[j])+strtoint(s1);
                 //取两个字符里的数值和进位相加
              IF length(inttostr(k))=2 then
                begin
                  s1:=inttostr(k)[1];  //保留进位数字
                  s2:=inttostr(k)[2];
                end
              else
                begin
                  s1:='0'; //进位清0
                  s2:=inttostr(k)[1];
                end;
              dec(i);
              dec(j);
              result:=s2+result;
            end;
          while i>0 do      // 把mNumberA中前面剩余数字加上进位返回
            begin
              k:=strtoint(mNumberA[i])+strtoint(s1);
              IF length(inttostr(k))=2 then
                begin
                  s1:=inttostr(k)[1];  //保留进位数字
                  s2:=inttostr(k)[2];
                end
              else
                begin
                  s1:='0'; //进位清0
                  s2:=inttostr(k)[1];
                end;
              dec(i);
              result:=s2+result;
            end;
          if strtoint(s1)<>0 then
            result:=s1+result;   //补齐最高进位
        end
      else
        begin
          result:='';
          s1:='0';
          while i>0 do //判断长度短的字符串是否加完
            begin
              k:=strtoint(mNumberA[i])+strtoint(mNumberB[j])+strtoint(s1);
                 //取两个字符里的数值和进位相加
              IF length(inttostr(k))=2 then
                begin
                  s1:=inttostr(k)[1];  //保留进位数字
                  s2:=inttostr(k)[2];
                end
              else
                begin
                  s1:='0'; //进位清0
                  s2:=inttostr(k)[1];
                end;
              dec(i);
              dec(j);
              result:=s2+result;
            end;
          while j>0 do      // 把mNumberB中前面剩余数字加上进位返回
            begin
              k:=strtoint(mNumberB[j])+strtoint(s1);
              IF length(inttostr(k))=2 then
                begin
                  s1:=inttostr(k)[1];  //保留进位数字
                  s2:=inttostr(k)[2];
                end
              else
                begin
                  s1:='0'; //进位清0
                  s2:=inttostr(k)[1];
                end;
              dec(j);
              result:=s2+result;
            end;
          if strtoint(s1)<>0 then
            result:=s1+result;   //补齐最高进位
        end;
    end;
    procedure TForm1.Button1Click(Sender: TObject);
    begin
    edit1.Text:=calc(edit2.Text,edit3.Text );
    end;end.
      

  3.   

    function Calc(mNumberA: string; mNumberB: string): string;
    var
      I, J, K: Integer;
      S1, S2: string;
    begin
      I := Length(mNumberA);
      J := Length(mNumberB);
      if I < J then begin //参数、Result当普通变量用
        K := I;
        I := J;
        J := K;
        Result := mNumberA;
        mNumberA := mNumberB;
        mNumberB := Result;
      end;  Result := '';
      S1 := '0';
      while J > 0 do begin
        K := StrToInt(mNumberA[I]) + StrToInt(mNumberB[J]) + StrToInt(S1);
        if Length(IntToStr(K)) = 2 then begin
          S1 := IntToStr(K)[1]; //保留进位数字
          S2 := IntToStr(K)[2];
        end else begin
          S1 := '0'; //进位清0
          S2 := IntToStr(K)[1];
        end;
        Dec(I);
        Dec(J);
        Result := S2 + Result;
      end;
      while I > 0 do begin
        K := StrToInt(mNumberA[I]) + StrToInt(S1);
        if Length(IntToStr(K)) = 2 then begin
          S1 := IntToStr(K)[1]; //保留进位数字
          S2 := IntToStr(K)[2];
        end else begin
          S1 := '0'; //进位清0
          S2 := IntToStr(K)[1];
        end;
        Dec(I);
        Result := S2 + Result;
      end;
      if StrToInt(S1) <> 0 then
        Result := S1 + Result; //补齐最高进位
    end;
      

  4.   

    师傅,我怎么发不出消息了?
    我把你程序copy走了,:)
      

  5.   

    //如下是加小数的情况的算法(*//
    [算法思维]
    Step.1 对齐位数
      '123.456789'
      '45678.9'
      -->
      '00123.456789'
      '45678.900000'Step.2 反向顺序计算每个位数
      '012.79'
      '456.71'
           ||
           |~9 + 1 = 10 (='1')
           ~7 + 7 + 1 = 15 (='5')
       .......Step.3 排除无效表达方式
      '01.100' -> '1.1'
      '.9' -> '0.9'
      '' -> '0'
    //*)
    function Calc(mNumberA, mNumberB: string): string; { 返回大数和,包括小数情况 }  function Max(mIntA, mIntB: Integer): Integer; { 返回最大值 }
      begin
        if mIntA > mIntB then
          Result := mIntA
        else Result := mIntB;
      end; { Max }  function DupeString(mStr: string; mCount: Integer): string; { 返回字符复本 }
      var
        I: Integer;
      begin
        Result := '';
        for I := 1 to mCount do
          Result := Result + mStr;
      end; { DupeString }  function StrLeft(const mStr: string; mDelimiter: string): string; { 返回左分隔字符 }
      begin
        Result := Copy(mStr, 1, Pos(mDelimiter, mStr) - 1);
      end; { StrLeft }  function StrRight(const mStr: string; mDelimiter: string): string; { 返回右分隔字符 }
      begin
        if Pos(mDelimiter, mStr) <= 0 then
          Result := ''
        else Result := Copy(mStr, Pos(mDelimiter, mStr) + Length(mDelimiter), MaxInt);
      end; { StrRight }var
      I: Integer;
      T: Integer;
    begin
      Result := '';
      if Pos('.', mNumberA) <= 0 then mNumberA := mNumberA + '.'; //没有有小数点补小数点
      if Pos('.', mNumberB) <= 0 then mNumberB := mNumberB + '.'; //没有有小数点补小数点
      I := Max(Length(StrLeft(mNumberA, '.')), Length(StrLeft(mNumberB, '.'))); //整数部分最大长度
      mNumberA := DupeString('0', I - Length(StrLeft(mNumberA, '.'))) + mNumberA; //整数前补0
      mNumberB := DupeString('0', I - Length(StrLeft(mNumberB, '.'))) + mNumberB; //整数前补0
      T := Max(Length(StrRight(mNumberA, '.')), Length(StrRight(mNumberB, '.'))); //小数部分最大长度
      mNumberA := mNumberA + DupeString('0', T - Length(StrRight(mNumberA, '.'))); //小数后补0
      mNumberB := mNumberB + DupeString('0', T - Length(StrRight(mNumberB, '.'))); //小数后补0
      I := I + T + 1; //计算总长度//小数长度和整数长度加上小数点长度
      T := 0; //进位数初始化
      for I := I downto 1 do //从后向前扫描
        if [mNumberA[I], mNumberB[I]] <> ['.'] then begin //不是小数点时
          T := StrToIntDef(mNumberA[I], 0) + T; //累加当前数位
          T := StrToIntDef(mNumberB[I], 0) + T; //累加当前数位
          Result := IntToStr(T mod 10) + Result; //计算当前数位上的数字
          T := T div 10; //计算进位数
        end else Result := '.' + Result; //加上小数点
      if T <> 0 then Result := IntToStr(T mod 10) + Result; //处理进位数
      while Pos('0', Result) = 1 do Delete(Result, 1, 1); //排除整数前无效的0
      while Copy(Result, Length(Result), 1) = '0' do Delete(Result, Length(Result), 1); //排除小数后无效的0
      if Copy(Result, Length(Result), 1) = '.' then Delete(Result, Length(Result), 1); //排除无效小数点
      if Copy(Result, 1, 1) = '.' then Result := '0' + Result; //处理无0小数情况
      if (Result = '') then Result := '0'; //处理空字符情况
    end;
      

  6.   

    练习题 3.3
      算法命题:无限位数减法(尽量考虑全部情况,负数、小数....)
      输入范例:10000000000000,1
      输出范例:9999999999999
      测试代码:
    function Calc(mNumberA: string; mNumberB: string): string;
    begin
      { 你的代码 }
    end;procedure TForm1.Button1Click(Sender: TObject);
    begin
      Edit3.Text := Calc(Edit1.Text, Edit2.Text);
    end;
      

  7.   

    to zswang(伴水)(需要充充电) 呜呜呜呜呜呜呜呜呜呜呜呜
    呜呜呜呜师傅收到呜呜呜呜
    呜呜呜呜呜呜呜呜呜呜呜呜
      

  8.   

    参看声明部分
    比如:函数IntToStr()在声明中是
    function IntToStr(AValue: Integer): string;
    //       ~~~~~~~是IntToStr()不是inttostr()
    鼠标移动在标识上系统会提示!
      

  9.   

    俺知道这次用的JAVA就区分大下写了,是不是?
    //cry
      

  10.   

    to awen800() (  ) 信誉:97 还没影那
    俺在学JAVA那
    学的头都J了
    呜呜