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,Wrong Answer,可是自己输入、输出都是对的啊,到底是那里错了呢?

Posted by 2227887665 at 2013-06-16 00:58:02
#include <iostream>
#include <sstream>
#include <string>
using namespace std;

struct NumType {
	string str;
	int power;
}num[6];

template <class T>
inline T fromString (const string & str) {
	istringstream is (str);                
	T v;
	is >> v;                               
	return v;                              
}

void Change (string str,int num[],int *p,int *q) {
	int length1 = str.length();                
	string a[100] = {"0"};                    
	for (int i = 0;i < length1;i++)            
		a[i] = str[i];
//将小数化为整数
	int n=0;                                   
	int s=0,r=0;                               
	for (int k = 0;k < length1;k++) {
		if (a[k] == ".") {                     
			s = k;                            
			continue;
		}
		else {
			num[n] = fromString <int> (a[k]);  
			n++;                               
		}
 	}
	*p = n;
	*q = n-s;
}

void Reverse (int num[],int n) {
	int num1[200] = {0};
	for (int i = 0;i < n;i++) {
		num1[i] = num[i];
	}
	for (int j = 0,k = n-1;j < n,k >= 0;j++,k--)
		num[k] = num1[j];
}

void Dispose (int num[],int *n) {
	int i = *n;
	if (num[i-1] == 0)
		*n = i-1;
}

int HighPrecisionMultiplication (int Num1[],int *bit1,int *bit2,int *bit) {

	int c[200] = {0},i,j,len;
//	memset (c,0,sizeof (c));
	for(i=0;i<(*bit2);i++)
		for(j=0;j<(*bit1);j++) {
			c[i+j]=c[i+j]+(*(bit+j))*Num1[i];
		}
	
	len = (*bit1) + (*bit2);
	for(i=0;i<len;i++)
	{
		c[i+1]=c[i+1]+c[i]/10;
		c[i]=c[i]%10;
		*(bit+i) = c[i];
	}
	if (c[len-1] <= 0) {
		*bit1 = (len - 1);
		return *bit,*bit1;
	}
	else {
		*bit1 = len;
		return *bit,*bit1;
	}
}

void output (string str0,int power0) {
	string str;                                        
	int power;                                         
    str = str0,power = power0;                 
	int Num[200] = {0},intbit = 0,floatbit = 0;              

//转换函数Change调用,字符串转换为数存放在数组里,相当于转化为一整数

	Change (str,Num,&intbit,&floatbit);

//倒置函数reverse函数调用,数组倒置

	Reverse (Num,intbit);

//数据处理,把尾部的0处理掉,例如,输入0.4321,经过转化,倒置,处理后变为1234
	int Num1[200] = {0};

	Dispose (Num,&intbit);

	for (int j = 0;j < intbit;j++) {
		Num1[j] = Num[j];                        
	}

//相乘
	int bit1,bit2;
	bit1 = intbit,bit2 = intbit;                 

//指数的n-1次相乘	
	for (int i = 1;i < power;i++) {
		HighPrecisionMultiplication (Num1,&bit1,&bit2,Num);
		for (int j = bit1-1;j >= 0;j--) {
			if (Num1[i] == 0) {
				Dispose (Num,&bit1);
			}
			else
				break;
		}
	}

	int T = 0;                              
	for (;T < bit1;T++) {
		if (Num[T] == 0)
			continue;
		else
			break;
	}
	if (bit1 < floatbit*power)              
		bit1 = floatbit*power;
	for (int j = bit1-1;j >= 0;j--){
		if (Num[bit1-1] != 0) {
			cout << Num[j];
			if (j == (floatbit*power))
				cout << ".";
		}
		else {
			if (j == (floatbit*power)-1)
				cout << ".";
			cout << Num[j];
		}
		if (T != 0)
			if (j == T)
				break;
	}
	cout << endl;
}

int main () {
	for (int i = 0;i < 6;i++) {
		cin >> num[i].str >> num[i].power;
	}
	cout << endl;
	string str0;
	int power0;
	for (int j = 0;j < 6;j++) {
		str0 = num[j].str,power0 = num[j].power;
		output (str0,power0);
	}
	return 0;
}

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