2桁未満の数字の1桁目の数字だけを返す関数

解決


OISHIMAN  2004-12-22 10:09:10  No: 12443

表題のような関数はありますでしょうか。
1桁目だけを合計したいのですが。


りおりお  2004-12-22 10:14:37  No: 12444

2桁未満の数字は1桁なのでは?


りおりお  2004-12-22 10:34:22  No: 12445

たとえば

a := 12345;

の場合、5 の部分を数値としてとりだすには10で割ったあまり

b := (a mod 10);

とすると b は 5 になります。


OISHIMAN  2004-12-22 10:46:56  No: 12446

やはり,割らないとだめですよね


りおりお  2004-12-22 10:58:03  No: 12447

> やはり,割らないとだめですよね

わり算だと何か不都合があるのですか?

function hitoketa(value:integer):integer;
begin
  result := value mod 10;
end;


OISHIMAN  2004-12-22 11:03:33  No: 12448

すみませんでした。
とにかく問題は解決しました。
ありがとうございました。


OISHIMAN  2004-12-22 11:04:23  No: 12449

問題解決


りおりお  2004-12-22 16:17:45  No: 12450

十進の8桁までの整数のバイナリー表現を4ビットごとの十進数(BCD)表現に
変換する関数を見つけました。

ここの Tips21 です。
http://www.xploiter.com/programming/delphi/tips3.shtml

これを使うと一回の変換で、各桁の10進数が求められます。

function Base10(Base2:Integer) : Integer; assembler;
asm
  cmp    eax,100000000            // check upper limit
  jb     @1                       // ok
  mov    eax,-1                   // error flag
  jmp    @exit                    // exit with -1
@1:
  push   ebx                      // save registers
  push   esi
  xor    esi,esi                  // result = 0
  mov    ebx,10                   // diveder base 10
  mov    ecx,8                    // 8 nibbles (10^8-1)
@2:
  mov    edx,0                    // clear remainder
  div    ebx                      // eax DIV 10, edx mod 10
  add    esi,edx                  // result = result + remainder[I]
  ror    esi,4                    // shift nibble 
  loop  @2                       // loop for all 8 nibbles
  mov    eax,esi                  // function result
  pop    esi                      // restore registers
  pop    ebx
@exit:
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  value,i:integer;
begin
  value := 12345678;
  value := Base10(value);
  for i := 1 to 8 do
   Memo1.Lines.Add(IntToStr(value shr ((i-1)*4) and $F));
end;

Memo1 の結果

8
7
6
5
4
3
2
1


りおりお  2004-12-22 16:29:38  No: 12451

上のコードはアセンブラですが、10で割って商と余りを繰り返し使っていること
には変わりありませんね。最下位(1の位)だけでしたら mod 10 の方が何倍も
高速でしょう。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加