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

求大神帮忙!!一直tle但是自己又不觉得慢,我估计是哪里掉循环里面了,所有测试数据我都过了啊,大家看看

Posted by num9332 at 2012-03-11 21:05:56 on Problem 2413
//首先参数传进来肯定是字符串,肯定要做逆置
//,把下标为0的字符变成数字的个位,然后模拟进位,算两个数的加法,存到下一个字符串里面,直到超过10^100,然后二分查找来找到数的临界值,
//从那个值开始进行字符串比较,直到比上限都大
#include <stdio.h>
#include <string.h>
char he[150]={0};
void plus(char beijiashu[],char jiashu[])
{
	char beijiashufan[150]={0};
	char jiashufan[150]={0};
	int i,k;
	int temp;//计算用临时变量
	int carry=0;//进位变量
	for(i=strlen(beijiashu)-1,k=0;i>=0;i--,k++)
	{
		beijiashufan[k]=beijiashu[i];
	}
	for(i=strlen(jiashu)-1,k=0;i>=0;i--,k++)
	{
		jiashufan[k]=jiashu[i];
	}
	int len;
	len=strlen(beijiashufan);
	for(i=0;i<=len;i++)
	{
		if(jiashufan[i]==0)
			jiashufan[i]=jiashufan[i]+'0';
		if(beijiashufan[i]==0)
			beijiashufan[i]=beijiashufan[i]+'0';
		temp=(beijiashufan[i]-'0')+(jiashufan[i]-'0')+carry;
		carry=temp/10;
		beijiashufan[i]=temp%10+'0';
	}
	len=strlen(beijiashufan);
	if(beijiashufan[len-1]=='0')
		beijiashufan[len-1]=0;
	len=strlen(beijiashufan);
	for(i=len-1,k=0;i>=0;i--,k++)
	{
		he[k]=beijiashufan[i];
	}
}
int cmp(char a[],char b[])
{
	int r;
	if(strlen(a)>strlen(b))
		r=1;
	else if(strlen(a)<strlen(b))
		r=-1;
	else
		r=strcmp(a,b);
	return r;
}
int main()
{
	char fibs[500][120]={0};
	//首先把fib数组构建起来
	strcpy(fibs[0],"1");
	strcpy(fibs[1],"2");
	int i;
	for(i=2;strlen(fibs[i-1])<102;i++)
	{
		plus(fibs[i-1],fibs[i-2]);
		strcpy(fibs[i],he);
		memset(he,0,sizeof(char)*150);
	}
	char low[120]={0},high[120]={0};
	
	while(1)
	{
		scanf("%s %s",low,high);
		if(!(strcmp(low,"0")||strcmp(high,"0")))
			break;
		int min=0,max=500,mid;
		mid=(min+max)/2;
		while(!((cmp(fibs[mid],low)<0)&&(cmp(fibs[mid+1],low)>0)))
		{		
			if(cmp(fibs[mid],low)>0)
				max=mid;
			else if(cmp(fibs[mid],low)<0)
				min=mid;
			else
			{
				break;
			}
			mid=(min+max)/2;
			if(min>=max)
				break;
		}
		int count=0;
		while(cmp(fibs[mid],high)<=0)
		{
			if((cmp(fibs[mid],low)>=0)&&(cmp(fibs[mid],high)<=0))
				count++;
			mid++;
		}
		printf("%d\n",count);
	}
	return 0;
}

Poj菜鸟求解啊!!!

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