| ||||||||||
| 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 | |||||||||
Re:求大神帮我看看啊 WA n次了 不知道错在哪= =In Reply To:求大神帮我看看啊 WA n次了 不知道错在哪= = Posted by:a4423329 at 2015-11-24 21:43:50 > #include <iostream>
> #include <string>
> #include <cstring>
> #include <vector>
> #include <algorithm>
> using namespace std;
> string power_fish(string R,int n);
> int main()
> {
> string R;
> int n;
> while(cin>>R>>n)
> {
> string s;
> s=power_fish(R,n);
> int len=s.size();
> if(len==1)
> {
> cout<<s;
> cout<<endl;
> }
> else if(s[0]=='0'&&s[1]=='.')
> {
> s=s.substr(1,s.size());
> cout<<s;
> cout<<endl;
> }
> else
> cout<<s;
> cout<<endl;
> }
> system("PAUSE");
> return 0;
>
> }
> string power_fish(string R,int n)
> {
> string biao="0123456789";
> //string qq=R;
> int accout1=-1;
> if(n==0)
> {
> string s="1";
> return s;
> }
> for(int i=0;i<R.size();++i)//判断小数点位置
> {
> if(R[i]=='.')
> accout1=i;
> }
>
> while(accout1==0&&R[R.size()-1]=='0')
> {
>
> R=R.substr(0,R.size()-1);
> if(R.size()==1)
> break;
> }
>
> while(accout1!=0&&R[R.size()-1]=='0')
> {
> if(accout1==-1)
> break;
> R=R.substr(0,R.size()-1);
> if(R.size()==1)
> break;
> }
>
> if(accout1==1&&R.size()==2)
> {
> R=R.substr(0,R.size()-1);
> accout1=0;
> }
> if(R[R.size()-1]=='.')
> {
> R=R.substr(0,R.size()-1);
> }
> while(accout1==0&&R.size()!=0)
> {
> int i=0;
> if(R[i]==0)
> {
> R=R.substr(1,R.size());
> }
> else
> {
> break;
> }
> }
> if(R.size()==0)
> {
> string s="0";
> return s;
> }
>
> while(R[0]=='0'&&R.size()!=1)
> {
> R=R.substr(1,R.size());
> }
>
> if(R[0]=='0'&&R.size()==1)
> {
> string s="0";
> return s;
> }
>
> vector <string> sum(n);
> sum[0]=R;
> accout1=-1;
> for(int i=0;i<R.size();++i)//判断小数点位置
> {
> if(R[i]=='.')
> accout1=i;
> }
>
> int n1=R.size();//乘数的长度
> int t1_r=accout1;//记录小数点的位置
>
> int t2_r=R.size()-t1_r-1;//记录小数的个数
> int t3_r=R.size()-1;//输入的数中除去小数点的个数
> if(t1_r==-1)
> {
> t2_r=0;
> t3_r=R.size();
> }
>
> //string *s=new string[t3_s];
> for(string::iterator it=R.begin();it!=R.end();++it)//将string中的小数点去除,好进行计算
> {
> if(*it=='.')
> {
> R.erase(it);
> }
> }
>
> vector<int> result;
> vector<char>result1;
> int L=0;//记录已经乘法的次数
>
>
> while((L+1)<n)
> {
> int n2=sum[L].size();//sum的长度
> int accout2=-1;
> for(int i=0;i!=n2;i++)//记录sum中小数点位置
> {
> if(sum[L][i]=='.')
> {
> accout2=i;
> break;
> }
> }
>
> int t1_s=accout2;//记录小数点的位置
> int t2_s=sum[L].size()-t1_s-1;//记录小数的个数
> int t3_s=sum[L].size()-1;//输入的数中除去小数点的个数
> if(t1_s==-1)
> {
> t2_s=0;
> t3_s=sum[L].size();
> }
>
> int m=t2_r+t2_s;//记录当前乘法的乘数与被乘数一共有的小数点位数
> vector<string> s(t3_r);//生成进行乘法运算时需要进行的次数的string数组
>
> for(string::iterator it=sum[L].begin();it!=sum[L].end();++it)
> {
> if(*it=='.')
> {
> sum[L].erase(it);//将sum中的小数点删除
> }
> }
>
>
>
> for(int i=t3_r-1;i>=0;--i)//sum*R的每一位的结果在*s中存储
> {
> int temp1=0;//记录进位
> for(int j=t3_s-1;j>=0;--j)
> {
> int temp=0;
> temp=(sum[L][j]-48)*(R[i]-48)+temp1;//要将符号对应的数字转化成int型的数字
> if(temp<=9)
> {
> s[i].push_back(biao[temp]);
> temp1=0;
> //s[i][j]=biao[temp];
> }
> else
> {
> temp1=temp/10;
> s[i].push_back(biao[temp%10]);//赋值不成功?
> if(j==0&&(temp>9))
> {
> s[i].push_back(biao[temp1]);
> }
> }
> }
> reverse(s[i].begin(),s[i].end());//将乘数的结果反转
> for(int p=0;p<t3_r-i-1;++p)//利用乘数的运算法则,进行移位处理。
> s[i].push_back(biao[0]);
> reverse(s[i].begin(),s[i].end());
> }
>
> for(int i=t3_r-1;i>=0;--i)//是每一行都进行相加,使多余为为0
> {
> for(int j=s[i].size();j<s[0].size();++j)
> {
> s[i].push_back(biao[0]);
> }
> }
>
> int reg,reg1;//reg1记录进位数 求和
> reg=reg1=0;
> for(int j=0;j<s[0].size();++j)//对齐 每位相加
> {
> int reg=0;
> for(int i=t3_r-1;i>=0;--i)
> {
> reg+=s[i][j]-48;//符号转化为数字
> }
> reg=reg+reg1;
> if(reg<=9)
> {
> result.push_back(reg);
> reg1=0;
> }
> else
> {
> reg1=reg/10;
> reg=reg%10;
> result.push_back(reg);
> }
> if(j==s[0].size()&®1!=0)
> {
> result.push_back(reg1);
> }
>
> }
>
> //reverse(result.begin(),result.end());
> if(m!=0)
> {
> if(m>result.size())
> {
> for(int ix=0;ix<result.size();++ix)
> {
> result1.push_back(biao[result[ix]]);
> }
> for(int ix=result.size();ix<m;++ix)
> {
> result1.push_back('0');
> }
> result1.push_back('.');
> }
> else
> {
> for(int ix=0;ix<=result.size();++ix)//插入‘.’符号进去
> {
>
>
> if(ix<m)
> {
> result1.push_back(biao[result[ix]]);
> }
> else if(ix>m)
> {
> result1.push_back(biao[result[ix-1]]);
> }
> else
> {
> result1.push_back('.');
>
> }
> }
> }
> }
> else
> {
> for(int ix=0;ix<result.size();++ix)
> result1.push_back(biao[result[ix]]);
>
> }
> reverse(result1.begin(),result1.end());
> ++L;
> for(int ix=0;ix<result1.size();++ix)
> {
> sum[L].push_back(result1[ix]);
> }
> result.erase(result.begin(),result.end());
> result1.erase(result1.begin(),result1.end());
> }
> string sum1=sum[n-1];
> return sum1;
> }
Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator