微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

UVALive 6270 Edge Case找规律,大数相加

转载请注明出处:http://blog.csdn.net/u012860063?viewmode=contents


找规律,前两个数的和等于后一个数的值;

其实就是大菲波数;

代码如下:

#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
using namespace std;
#include<cstdio>  
#include<cstring>
void fan(char s[])
{    
	char t;    
	int i,j;    
	for(i = 0,j = strlen(s)-1;i <= j;i++,j--)
	{  
		t=s[i];s[i]=s[j];s[j]=t;  
	}
}      
char ans[10047][4000];
int main()
{
	int i,j,n,p=0,g=0,h=1,k,l; 
	char x[4000],y[4000],z[4000];          
	strcpy(ans[1],"1");
	strcpy(ans[2],"3");
	strcpy(ans[3],"4");
	for(int mm = 4 ; mm<= 10000; mm++)
	{
		memset(x,sizeof(x));
		memset(y,sizeof(y));
		p=0;
		strcpy(x,ans[mm-1]);
		strcpy(y,ans[mm-2]);
		fan(x);fan(y);  
		k=strlen(x);
		l=strlen(y);  
		for(i = 0;i < k || i< l;i++ )
		{       
			if(i < k && i < l )
				z[i]=x[i]+y[i]+ p-'0';                
			else if(i < k && i >= l)   
				z[i]=x[i]+p;       
			else if(i >= k && i < l)   
				z[i]=y[i]+p;              
			if(z[i]>'9')
			{    
				z[i]-=10;           
				p=1;
			}              
			else   
				p=0;
		}          
		if(p)  
			z[i++]='1';
		z[i]='\0'; 
		fan(x);fan(y);fan(z);
		strcpy(ans[mm],z);
	}
	while(~scanf("%d",&n))
	{
		printf("%s",ans[n]);
		printf("\n");
	}
	return 0;
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐