字符串<=>数字 ?(30分)

  • 主题发起人 主题发起人 lbmjy
  • 开始时间 开始时间
L

lbmjy

Unregistered / Unconfirmed
GUEST, unregistred user!
20个“数字”字符串转换为数字作运算后再还原为字符?
x:='91233454565546546566';
x:=FloatToStr(StrToFloat(x)+1)
//?结果为科学计数法的字符串
//我需要还原为:'91233454565546546567'
 
既然加1,用后两位运算就行了
 
如果遇到进位(如-----99999)就有问题。
 
for i:=length(s) downto 1 do
if (StrToInt(s)+1)=10 then
begin
s:='0';
Continue;
end
else
begin
s:=IntToStr(StrToInt(s)+1);
Break;
end;

字符和数字的转换函数记得不是很清楚了,老大自己查一下吧
 
x:='91233454565546546566'
StrToFloat(x)+1 <=== 数值太大,系统自动转换成科学计数法,
 
分段吧,用高精度算法
比如:x:array[1..10] of string[5];
y:array[1..40] of integer;
y:=strtoint(x);
 
yntw思路是正确的,不过实现的方法实在太……了
其实+1就用ASCII加就行,然后判断>'9'进位就行
 
能不能简单一点,使用格式化函数?
 
//用递归难以理解,这样行不??
function PartAddOne(var Str:String):Boolean;
begin
if StrToInt(Str)+1=100000 then
begin
Result:=True;
Str:='00000';//结果超过99999
end else
begin
Str:=IntToStr(StrToInt(Str)+1);
Result:=False;//结果没有超过99999
end;
end;

function AddOne(Str:String):String;
var
Str:Array[1..4] of String;
AddBit:Boolean;
begin
Str[1]= 1到 5个字符;
Str[2]= 6到10个字符
Str[3]=11到15个字符
Str[4]=16到20个字符
AddBit:=False;
if PartAddOne(Str[4]) then
if PartAddOne(Str[3]) then
if PartAddOne(Str[2]) then
if PartAddOne(Str[1]) then
AddBit:=True;
Result:=Str[1]+Str[2]+Str[3]+Str[4];
if AddBit then
Result:='1'+Result;//如果最高5位也超过99999,则升位;
end;

delphi 5上实验通过!
 
这是一个递归方法,供你参考:
procedure tform1.p(var s : string
i : integer);//s:要计算的字符串;i:对s的第i位的计算
var
c : char;
begin
if i = 0 then s := '1' + s//i的取值是1到length(s),当i=0时表示s的最高位有进位
else if s = '9' then
begin
s := '0';//当前位是“9”时,置当前位为“0”,
p(s, i - 1);//对前一位做加1操作。
end
else begin//当前位不是“9”,直接加1,返回
c := s;
inc(c);
s := c;
end;
end;
...
s := '534654321864219865168599';
p(s, length(s));
...

在delphi5上运行通过。
 
这是加1的函数
procedure inc1(var s:string)
var
jinwei:integer
'进位
temp:integer;
begin
jinwei=0;
for i:=length(s) downto 1 do
begin
temp=Asc(s)+jinwei
'计算每一位的值可能>9,Asc()表示取s的ASCII值
jinwei=temp div 10;
temp=temp mod 10;
s=chr(temp);
end;
if jinwei>0 then
s:=chr(jinwei)+s;
end
对上面的函数修改一下就可以实现两个数字字符串相加了。
 
接受各位建议
 
多人接受答案了。
 

Similar threads

后退
顶部