数字反转升级版
2017-01-19 19:35
225 查看
给定一个数,请将该数各个位上数字反转得到一个新数。
这次与NOIp2011普及组第一题不同的是:这个数可以是小数,分数,百分数,整数。整数反转是将所有数位对调;小数反转是把整数部分的数反转,再将小数部分的数反转,不交换整数部分与小数部分;分数反转是把分母的数反转,再把分子的数反转,不交换分子与分母;百分数的分子一定是整数,百分数之改变数字部分。整数新数也应满足整数的常见形式,即除非给定的原数为零,否则反转后得到的新数的最高位数字不应为零;小数新数的末尾不为0(除非小数部分除了0没有别的数,那么只保留1个0);分数不约分,分子和分母都不是小数(约分滴童鞋抱歉了,不能过哦。输入数据保证分母不为0),本次没有负数。
主要思路就是按照题意去做,注意一下边界问题就OK了。
var
s,s1,s2,s3:string;
m,j,k,l,f,i:longint;
c:char;
procedure fz(var ss:string);
var
s8:string;
i,j:longint;
begin
s8:='';
j:=1;
for i:=length(ss) downto 1 do
begin
s8:=s8+ss[i];
inc(j);
end;
for i:=1 to length(s8) do
ss[i]:=s8[i];
end;
begin
read(s);
for i:=1 to length(s) do
if (s[i]='.') or (s[i]='/') or(s[i]='%') then
begin
m:=1;
c:=s[i];
s1:=copy(s,1,i-1);
if i<>length(s) then s2:=copy(s,i+1,length(s))
else s2:=' ';
end;
if m=1 then begin fz(s1);
if s2<>' ' then fz(s2);
for i:=1 to length(s1) do
if s1[i]='0' then inc(f)
else break;
delete(s1,1,f);
f:=0;
if c<>'/' then begin for i:=length(s2) downto 1 do
if s2[i]='0' then inc(f)
else break;
delete(s2,length(s2)-f+1,f); end;
f:=0;
if c='/' then begin for i:=1 to length(s2) do
if s2[i]='0' then inc(f)
else break;
delete(s2,1,f); end;
f:=0;
end;
if m=0 then begin
fz(s);
for i:=1 to length(s) do
if s[i]='0' then inc(f)
else break;
delete(s,1,f);
end;
if s2='' then s2:=s2+'0';
if s1='' then s1:=s1+'0';
if s='' then s:=s+'0';
if m=1 then write(s1,c,s2);
if m=0 then write(s);
end.
这次与NOIp2011普及组第一题不同的是:这个数可以是小数,分数,百分数,整数。整数反转是将所有数位对调;小数反转是把整数部分的数反转,再将小数部分的数反转,不交换整数部分与小数部分;分数反转是把分母的数反转,再把分子的数反转,不交换分子与分母;百分数的分子一定是整数,百分数之改变数字部分。整数新数也应满足整数的常见形式,即除非给定的原数为零,否则反转后得到的新数的最高位数字不应为零;小数新数的末尾不为0(除非小数部分除了0没有别的数,那么只保留1个0);分数不约分,分子和分母都不是小数(约分滴童鞋抱歉了,不能过哦。输入数据保证分母不为0),本次没有负数。
① 5087462 ② 600.084 ③ 700/27 ④ 8670%
① 2647805 ② 6.48 ③ 7/72 ④ 768%
主要思路就是按照题意去做,注意一下边界问题就OK了。
var
s,s1,s2,s3:string;
m,j,k,l,f,i:longint;
c:char;
procedure fz(var ss:string);
var
s8:string;
i,j:longint;
begin
s8:='';
j:=1;
for i:=length(ss) downto 1 do
begin
s8:=s8+ss[i];
inc(j);
end;
for i:=1 to length(s8) do
ss[i]:=s8[i];
end;
begin
read(s);
for i:=1 to length(s) do
if (s[i]='.') or (s[i]='/') or(s[i]='%') then
begin
m:=1;
c:=s[i];
s1:=copy(s,1,i-1);
if i<>length(s) then s2:=copy(s,i+1,length(s))
else s2:=' ';
end;
if m=1 then begin fz(s1);
if s2<>' ' then fz(s2);
for i:=1 to length(s1) do
if s1[i]='0' then inc(f)
else break;
delete(s1,1,f);
f:=0;
if c<>'/' then begin for i:=length(s2) downto 1 do
if s2[i]='0' then inc(f)
else break;
delete(s2,length(s2)-f+1,f); end;
f:=0;
if c='/' then begin for i:=1 to length(s2) do
if s2[i]='0' then inc(f)
else break;
delete(s2,1,f); end;
f:=0;
end;
if m=0 then begin
fz(s);
for i:=1 to length(s) do
if s[i]='0' then inc(f)
else break;
delete(s,1,f);
end;
if s2='' then s2:=s2+'0';
if s1='' then s1:=s1+'0';
if s='' then s:=s+'0';
if m=1 then write(s1,c,s2);
if m=0 then write(s);
end.
相关文章推荐
- luogu P1553 数字反转(升级版)
- 洛谷P1553 数字反转(升级版)
- P1553 数字反转(升级版)(洛谷)
- 洛谷 P1553 数字反转(升级版)【字符串+STL stack】
- 数字反转(升级版)
- 数字反转(升级版)
- 洛谷-数字反转(升级版)-简单字符串
- <NOIP> 19 . P1553 数字反转(升级版)
- string - 数字反转升级版
- 新手村 简单字符串 数字反转(升级版)
- P1553 数字反转(升级版)
- P1553 数字反转(升级版)
- P1553 数字反转(升级版)
- P1553 数字反转(升级版)(#1 - 5)
- 反转数字
- noip2011数字反转
- 算法题目----数字反转
- leetCode 7. Reverse Integer (数字反转) 解题思路与方法
- java 输入一个数字,反转输出这个数字的值(实现方法)
- 数字反转