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

1001实在整不出来啦 救命啊~~~~~~~~~~~~~~~~ 所有能搜到的数据都过 就是WA 大家帮看下什么毛病

Posted by hgzhangqing at 2011-10-19 01:49:06 and last updated at 2011-10-19 01:49:32
#include<iostream>
#include<stdlib.h>
#include<string>
#include<stdio.h>
#include<sstream>
#include<math.h>
#include<queue>
#include<ctime>
using namespace std;
string multiply(string a, int b, int c);
string add(string a, string b);
string multiplys(string a, string b);
class Inputs
{
	int power;
        string number;
        int point;
public:
	Inputs(string number, int power);
	int getpower();
	string getnumber();
	int getpoint();		
};

Inputs::Inputs(string num, int pow)
{
	int i = 0;
	int flag = 0;
	int count0 = 0;
	while(1)
	{
		if(num[num.size()-1-i] == '.')
			break;
		if((num.size()-1-i) == 0)
		{
			i = 0;
			break;
		}
		i++;
	}
	point = i;
	power = pow;
	i = 0;
	while(1)
	{
		if(num[num.size()-1-i] == '0')
			count0++;
		else break;
		i++;
	}
	if( point > count0)
	{
		for(i = 0; i < (num.size()-count0); i++)
		{
			if(flag == 0)
			{
				if(num[i] != '.' && num[i] != '0')
				{
					number = number + num[i];
					flag = 1;
				}
			}
			else if(num[i] != '.')
				number = number + num[i];
		}
		point = point - count0;
	}
	else
	{
		for(i = 0; i < num.size()-point; i++)
                {
                        if(flag == 0)
                        {
                                if(num[i] != '.' && num[i] != '0')
                                {
                                        number = number + num[i];
                                        flag = 1;
                                }
                        }
                        else if(num[i] != '.')
                                number = number + num[i];
                }
		point = 0;
	}
	
}

int Inputs::getpower()
{
	return power;
}

string Inputs::getnumber()
{
	return number;
}

int Inputs::getpoint()
{
	return point;
}

string getAnswer(Inputs input);

int main()
{
	string s1,result;
	int s2;
	//stringstream ss;
	while(cin >> s1 >> s2)
	{
		result = "";
		Inputs input(s1,s2);
		result = getAnswer(input);
		cout << result << endl;
	}
	return 0;
}

string getAnswer(Inputs input)
{
	string tmp,result;
	int count,point;
	count = input.getpower();
	tmp = input.getnumber();
	if(tmp != "" && count != 0)
	{
		for(int i = 0; i< (count-1); i++)
			tmp = multiplys(tmp,input.getnumber());
		point =  input.getpoint();
		count = count * point;
		if(tmp.size()>count)
		{
			for(int i = 0; i< (tmp.size()-count); i++)
				result = result + tmp[i];
			if(count != 0)
				result = result + '.';
			for(int i = (tmp.size()-count); i<tmp.size(); i++)
				result = result + tmp[i];
		}
		else
		{
			result = '.';
			for(int i = 0; i < (count - tmp.size()); i++)
				result = result + '0';
			result = result + tmp;
			//if(result[0] == '.' && result[1] == '\0');
				//result = "";
		}
	}
	else if(count == 0)
		result = "1";
	else result = "0";
	//cout << "input.number is " << input.getnumber() << endl;
	return result;
}

string multiplys(string a, string b)
{
	string s3,result="";
	stringstream ss;
	queue<string> results;
	for(int i=0;i<b.size();i++)
	{
		int tmp;
		ss.clear();
		ss << b[i];
		ss >> tmp;
		/*if(!ss.eof())
		{
			//perror("sstream");
			exit(EXIT_FAILURE);	
		}*/
		results.push(multiply(a,tmp,(b.size()-i-1)));
	}
	while(!results.empty())
	{
		s3 = results.front();
		result = add(result,s3);
		//cout << "the queue head is " << result << endl;
		results.pop();
	}
	//cout << "the multiplicates add the multiplier is " << add(s1,s2) << endl;
	return result;
}

string add(string a, string b) //this function is used to add b to a; the lenth of a and b may be different
{
	string result="";
	string strtmp="";
	stringstream ss,ss1,ss2;
	int carry = 0;
	int atmp,btmp,tmp;
	int flag = a.size()>b.size()?a.size():b.size();
	for(int i = 0; i< flag; i++)
	{
		if((a.size()-1-i)>=0)
		{
			ss1.clear();
			ss1 << a[a.size()-1-i];
			ss1 >> atmp;
		}
		else atmp = 0;
		
		if((b.size()-1-i)>=0)
		{
			ss2.clear();
			ss2 << b[b.size()-1-i];
			ss2 >> btmp;
		}
		else btmp = 0; 
		
		tmp = (atmp+btmp+carry)%10;
		carry = floor((atmp+btmp+carry)/10);

		ss.clear();
		ss << tmp;
		ss >> strtmp;
	
		result = strtmp + result;
	}
	if(carry!=0)
	{
		ss.clear();
		ss << carry;
		ss >> strtmp;
		result = strtmp + result;
	}
	return result;
}

string multiply(string a,int b,int c) //a is the multiplicated b is the multiplier c is the offset
{
	string result="";
	string strtmp="";
	int carry=0;
	int tmp;
	stringstream ss,ss1;
	for(int i=(a.size()-1); i >= 0;i--)
	{
		ss1.clear();
		ss1 << a[i];
		ss1 >> tmp;
		ss.clear();
		ss << (tmp*b+carry)%10;
		ss >> strtmp;
		carry = floor((tmp*b+carry)/10);
		//cout << "carry =" << carry << endl;
		result = strtmp + result;
	}
	if(carry!=0)
	{
		ss.clear();
		ss << carry;
		ss >> strtmp;
		result = strtmp + result;
	}
	for(int i = 0; i<c;i++)
	{
		result=result+"0";
	}
	return result;
}

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