string remove_later(string s)//去除后导0
{
bool ok=false;
for(int i=(int)s.size()-1;i>=0;i--)
{
if(s[i]=='0')
s.erase(i);
else if(s[i]=='.'){
s.erase(i);
ok=true;
}
else
ok=true;
if(ok) break;
}
return s;
}
string operator * (string s,int n)//浮点数的n次方
{
if(n==0)
return "1";
string count="",cmp="";
int x=0,point=0;
for(int i=0;i<s.size();i++)
{
if(s[i]!='.')
{
cmp+=s[i];
x=x*10+(s[i]-'0');
}
else
point=(int)s.size()-1-i;
}
for(int i=1;i<n;i++)
cmp=cmp*x;
int ans_point=(int)cmp.size()-point*n;
if(ans_point<0)
{
count+='0';
count+='.';
for(int i=ans_point;i!=0;i++)
count+='0';
}
if(ans_point>=0&&ans_point<cmp.size())
cmp.insert(cmp.begin()+ans_point,'.');
count+=remove_later(cmp);
return count;
}
字符串去除后导0函数,前导0可以先反转取后导。
<pre name="code" class="cpp">string Remove_later(string s) //删除一个字符串的后倒0
{
for(int i=s.size()-1; i>=0; i--)
{
if(s[i]=='0')
s.erase(i);
else
break;
}
return s;
}