Online JudgeProblem SetAuthorsOnline ContestsUser
Web Board
Home Page
F.A.Qs
Statistical Charts
Problems
Submit Problem
Online Status
Prob.ID:
Register
Update your info
Authors ranklist
Current Contest
Past Contests
Scheduled Contests
Award Contest
User ID:
Password:
  Register

Re:求大神帮我看看啊 WA n次了 不知道错在哪= =

Posted by abcdefu at 2022-07-23 22:49:11 on Problem 1001
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:
User ID:
Password:
Title:

Content:

Home Page   Go Back  To top


All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator