数字类型与字符类型转换(200分)

  • 主题发起人 主题发起人 gdgt2000
  • 开始时间 开始时间
G

gdgt2000

Unregistered / Unconfirmed
GUEST, unregistred user!
Edit1.Text:='5555555555555555555555555';//25位
如何让Edit1.Text加1,结果
Edit1.Text:='5555555555555555555555556';
 
这个涉及到 超长型数字 的加法了

自己写个这样的函数吧,大概思路就是把长的数字串截成短的然后一段一段处理
 
edit1.Text:=copy(edit1.Text,0,24)+inttostr(strtoint(copy(edit1.Text,24,1))+1);
 
呵呵,楼上老兄的copy函数用的还不是很熟啊

看看帮助吧
 
等一下。我写一个给你
 
[^][?][?][^][:D]
 
a:='5555555555555555555555555';
a[length(a)]:=char(ord(a[length(a)-1])+1) ;
showmessage(a);
 
edit1.Text:=copy(edit1.Text,1,24)+inttostr(strtoint(copy(edit1.Text,25,1))+1);

 
procedure Cal(var s: string; var p: Integer);
var
i, j: Integer;
c: string;
t: string;
q: Integer;
begin
q := Length(s) - p + 1;
c := s[q];
i := StrToInt(c);
j := i + 1;
if j >= 10 then
begin
s[q] := '0';
Inc(p);
if p > Length(s) then
s := '1' + s
else
Cal(s, p);
end
else
begin
t := IntToStr(j);
s[q] := t[1];
end;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
p: Integer;
s: string;
begin
s := Edit1.Text; //'5555555555555555555555555';//25位
p := 1;
Cal(s, p);
Caption := s;
end;
 
迷糊还真迷糊哦:)[:D]
 
这么快就有人写好了??
我刚写完,没有楼上的朋友写的好。不好意思拿出来了。
我是半路出家的上个月刚刚学delphi,以后要向各位多多请教。
 
我的代码:
function CalStr(aStr, aSubStr : string): string;
var
I, H,C, L, Tmp, Tmp1 : Integer;
S, Sub : string;
begin
if Length(aStr) >= Length(aSubStr) then
begin
S := aStr;
Sub := aSubStr;
end
else begin
Sub := aStr;
S := aSubStr;
end;

H := Length(S);
C := Length(Sub);

Tmp := 0;
for I := H downto 1 do
begin
L := I - (H - C);
if L > 0 then
begin
Tmp1 := StrToInt(S) + StrToInt(Sub[L]) + Tmp;
end
else
if Tmp > 0 then
Tmp1 := StrToInt(S) + Tmp
else
Break;

S := IntToStr(Tmp1 mod 10)[1];
Tmp := Tmp1 div 10;
end;
if Tmp > 0 then S := IntToStr(Tmp) + S;
Result := S;
end;

procedure TForm1.BitBtn2Click(Sender: TObject);
begin
Edit1.Text := CalStr(Edit2.Text, Edit3.Text);
end;
 
你看明白就行了:

Edit1.text[25]:=char(inttostr(strtoint(Edit1.text[25])+1));
如果是9的话你自己想一想啦...
 
function TForm1.ADD(Str: String): String;
var
I: Integer;
subStr,IStr: String;
begin
if trim(Str) = '' then Exit;

subStr := AnsiLeftStr(Str,length(str) - 1);
IStr := AnsiRightStr(Str,1);
try
StrToInt(IStr);
except
ShowMessage('不是有效的数字字符');
Exit;
end;
I := StrToInt(IStr);
I := I + 1;
Result := subStr + IntToStr(I);
end;
测试:
Edit1.Text := ADD(Edit1.Text);
 
很简单的:
何必那摸麻烦的用如此长的计算呢???
看我的代码:
procedure TForm1.Button1Click(Sender: TObject);
var
str,str1:string;
begin
str:=edit1.text;
str1:=edit1.Text;
str1:=copy(str1,1,24);
delete(str,1,24);
str:=inttostr(strtoint(str)+1);
edit1.Text:=str1+str;
end;
这样edit1.text:=5555555555555555555555555;//25个‘5’;
就变成了5555555555555555555555556 //24个‘5’和一个‘6’了;
我不明白,
为什么有现成的函数不用,
却要知己写,你能有DELPHI写的好吗???
祝大家:
新年快乐
万事如意
!!!!!!!!!!
 
vc_delphi,难道25位的一个整型数都支持?
 
接受答案了.
 
我的代码完成了任意两个超长整数字符串的加法,如:
CalStr('12345678909876543215555', '1234567877889887675433434334')='1234580223568797551976649889 '
而其他DX的只局部实用,好像只能加一.就像DouZheng的,如果调用
cal('999999999999999999999999999999',9) ='1000000000000000000000099999999',实在不知什么意思?
而vc_delphi的代码,只考虑了在末尾加一,没考虑多位,并且没考虑进位.
 
我的 代码 给我加分吧
procedure TForm1.Button1Click(Sender: TObject);
procedure AddOneNumber(var Astr:string;Atag:integer);
begin
if Astr[Atag]='9' then
begin
Astr[Atag]:='0';
if Atag>1 then AddOneNumber(Astr,Atag-1);
end
else
Astr[Atag]:=inttostr(strtoint(Astr[Atag])+1)[1];
end;

var
MyStr:string;
begin
MyStr:='5555555555555555555555589';
AddOneNumber(MyStr,length(MyStr));
showmessage(MyStr);
end;
 
后退
顶部