Online Judge | Problem Set | Authors | Online Contests | User | ||||||
---|---|---|---|---|---|---|---|---|---|---|
Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest |
谁能给我指出哪里出了错?#include <iostream> #include <string> using namespace std; void trans(string &s,int &pos) {//此函数把初始数据可以去掉的前后0以及.去掉,并把数字顺序倒置 string t; int i,k,p=0,f=0; for (i=0;i<s.length();i++)if (s[i]=='.')f=1; pos=0; k=s.length()-1; if (f==1) { while (s[k]=='0'){s.erase(k,1);k--;} // if ((s.length()==1)&&(s[0]=='.'))s[0]='0'; if (s[k]=='.') { if (k==0)s[k]='0'; else {s.erase(k,1);k--;} }else { while (s[p]!='.')p++; pos=k-p; for (;p<k;p++)s[p]=s[p+1]; s.erase(k,1); k--; } } t.resize(s.length()); for (p=0;p<s.length();p++)t[p]=s[s.length()-1-p]; s=t; while ((s.length()>1)&&(s[s.length()-1]=='0')){s.erase(s.length()-1,1);} }//trans string mul(string a,string b) {//此函数用来计算2个数的乘积 string result; int i,t,j; result.resize(a.length()+b.length()); for (i=0;i<result.length();i++)result[i]='0'; for (i=0;i<b.length();i++) { for (j=0;j<a.length();j++) { t=(b[i]-48)*(a[j]-48); result[i+j+1]=result[i+j+1]+(result[i+j]-48+t)/10; result[i+j]=48+(result[i+j]-48+t)%10; } } if (result[result.length()-1]==48) result.erase(result.length()-1,1); //cout<<result.length()<<endl<<result<<endl; return result; }//mul int main(){ string s,result; int n,i,k,pos; while (cin>>s>>n) { trans(s,pos); result=s; for (i=1;i<n;i++) result=mul(result,s); k=result.length(); if (k>n*pos) {//小数位数小于上面得出乘积的位数的情况 s.resize(k+1); for (i=0;i<k;i++) { if (i<pos*n) s[k-i]=result[i]; else s[k-i-1]=result[i]; } if (pos>0)s[k-pos*n]='.'; result=s; }else {//小数位数不小于上面得出乘积的位数的情况 s.resize(n*pos+1); s[0]='.'; for (i=1;i<n*pos+1-k;i++)s[i]='0'; for (i=n*pos+1-k;i<n*pos+1;i++)s[i]=result[n*pos-i]; result=s; } k=result.length()-1; while (result[k]=='0'){result.erase(k,1);k--;} cout<<result<<endl; s=""; } } Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator