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

哪里错了??不明白啊顺序查找都错?求大牛看看哪。。

Posted by long1897 at 2014-07-21 15:54:30 on Problem 2413
#include<iostream>
#include<string>
#include<time.h>
using namespace std;
#define MAX 300
#define MAX_L 1000
struct fun
{
	int num[MAX];
}data[MAX_L];
int cmp(int a[],int b[])                                               //高精度比较法,a>b返回1 相等返回0 a<b返回 -1
{
	int t_la = 0,t_lb = 0,i;
	for( i = 0; i < MAX; i++ )
	{
		if( a[i] != 0 )
			break;
	}
	t_la = MAX - i;
	for( i = 0; i < MAX; i++ )
	{
		if( a[i] != 0 )
			break;
	}
	t_lb = MAX - i;
	if( t_la > t_lb )
		return 1;
	else if( t_la < t_lb )
		return -1;
	else
	{
		for( i = MAX - t_la; i < MAX; i++ )
			if( a[i] > b[i] )
				return 1;
			else if( a[i]<b[i] )
				return -1;
		return 0;
	}
}
void add(int a[],int b[],int ans[])                                  //高精度加法
{
	int carry = 0,temp[MAX] = {0},data;
	for( int i = MAX - 1; i >= 0; i-- )
	{
		data = a[i] + b[i] + carry;
		if( data >= 0 )
		{
			temp[i] = data % 10;
			carry = data / 10;
		}
		else
		{
			temp[i] = data;
			carry = 0;
		}
	}
	memset(ans,0,sizeof(ans));
	for( int i = 0; i < MAX; i++ )
		ans[i] = temp[i];
}
void change(int num[],char temp[])                                  //高精度转换
{
    for( int i = MAX - 1,j = strlen(temp) - 1; i >= 0 && j >= 0; i--, j-- )
		num[i] = temp[j] - '0';
}

int main()
{
//	clock_t begin,end;
//	begin = clock();
//	freopen("E://input.txt","r",stdin);
	char a[MAX] = {'\0'},b[MAX] = {'\0'};
	int num1[MAX] = {0},num2[MAX] = {0},count;
	memset(data[0].num,0,sizeof(data[0].num));
	memset(data[1].num,0,sizeof(data[0].num));
	data[0].num[MAX-1] = 1;
	data[1].num[MAX-1] = 2;
	for( int i = 2; i < MAX_L; i++ )
		add(data[i-1].num,data[i-2].num,data[i].num);
	while( scanf("%s%s",a,b) != EOF )
	{
		count = 0;
		if( !strcmp(a,"0") && !strcmp(b,"0") )
			break;
		change(num1,a);
		change(num2,b);
		for( int i = 0; i < MAX_L; i++ )
		{
			if( cmp(data[i].num,num1) >= 0 && cmp(data[i].num,num2) <= 0 )
				count++;
		}
		cout<<count<<endl;
		memset(a,'\0',sizeof(a));
		memset(b,'\0',sizeof(b));
		memset(num1,0,sizeof(num1));
		memset(num2,0,sizeof(num2));
	}
//	end = clock();
//	cout<<end - begin<<"MS"<<endl;
	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