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

囧,我在ZJU一直WA,在这里一次就AC了。。什么原因

Posted by haipeng31 at 2010-11-08 14:01:07 on Problem 2413
In Reply To:any tricks? i got AC in zju Posted by:richardhuang at 2005-04-23 19:24:33
> rt
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#define SIZE 1024

int min(int a, int b)
{
	if(a <= b) {
		return a;
	}
	else {
		return b;
	}
}

int max(int a, int b)
{
	if(a >= b) {
		return a;
	}
	else {
		return b;
	}
}

void reverse(char *a)
{
	int left = 0;
	int right = strlen(a)-1;
	char temp;
	while(left < right) {
		temp = a[left];
		a[left] = a[right];
		a[right] = temp;
		left++;
		right--;
	}
}

void add(char *a, char *b, char *c)
{
	int lenA = strlen(a);
	int lenB = strlen(b);

	int i;
	int carry = 0;
	int temp;
	int len = min(lenA, lenB);
	for(i = 0; i < len; i++) {
		temp = (a[lenA-1-i] - '0') + (b[lenB-1-i] - '0') + carry;
		carry = temp / 10;
		c[i] = (temp % 10) + '0';
	}

	if(lenA <= lenB) {
		for(i = len; i < lenB; i++) {
			temp = (b[lenB-1-i] - '0') + carry;
			carry = temp / 10;
			c[i] = (temp % 10) + '0';
		}
	}
	else {
		for(i = len; i < lenA; i++) {
			temp = (a[lenA-1-i] - '0') + carry;
			carry = temp / 10;
			c[i] = (temp % 10) + '0';
		}
	}
	if(carry != 0) {
		c[max(lenA, lenB)] = carry + '0';
		c[max(lenA, lenB)+1] = '\0';
	}
	else {
		c[max(lenA, lenB)] = '\0';
	}
	
	reverse(c);
}

int compare(char *a, char *b)
{
	int rt = 0;
	if(strlen(a) < strlen(b)) {
		rt = -1;
	}
	else if(strlen(a) > strlen(b)) {
		rt = 1;
	}
	else {
		rt = strcmp(a, b);
	}
	return rt;
}

int fibnum(char *a, char *b)
{
	int i;
	int num = 0;
	char f1[SIZE];
	char f2[SIZE];
	char temp[SIZE];
	memset(f1, 0, SIZE);
	memset(f2, 0, SIZE);
	memset(temp, 0, SIZE);
	f1[0] = '1';
	f2[0] = '2';
	
	i = 0;
	strcpy(temp, a);
	while(temp[i] == '0' && i < strlen(a)-1) {
		i++;
	}
	memset(a, 0, SIZE);
	strcpy(a, temp+i);

	i = 0;
	memset(temp, 0, SIZE);
	strcpy(temp, b);
	while(temp[i] == '0' && i < strlen(b)-1) {
		i++;
	}
	memset(b, 0, SIZE);
	strcpy(b, temp+i);

	while(1) {
		if(compare(b, f1) == -1) {
			break;
		}
		if(compare(a, f1) == -1 || compare(a, f1) == 0) {
			num++;
		}
		memset(temp, 0, SIZE);
		add(f1, f2, temp);
		memset(f1, 0, SIZE);
		strcpy(f1, f2);
		memset(f2, 0, SIZE);
		strcpy(f2, temp);
	}
	return num;
}

int main()
{
	char a[SIZE];
	char b[SIZE];
	memset(a, 0, SIZE);
	memset(b, 0, SIZE);
	
	while(1) {
		memset(a, 0, SIZE);
		memset(b, 0, SIZE);
		scanf("%s", a);
		scanf("%s", b);
		if(strcmp(a, "0") == 0 && strcmp(b, "0") == 0) {
			break;
		}
		printf("%d\n", fibnum(a, b));
	}
	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