コード例 #1
0
void main()
{
	long n;
	int a[2][2];
	while(scanf("%ld",&n)&&n!=-1)
	{
		fenzhi(n,a);
		printf("%d\n",a[0][1]%10000);
	}
}
コード例 #2
0
void fenzhi(string num, string tmp, long long target,long long cur, long long prev) {
	if (cur == target && num.size() == 0) {
		res.push_back(tmp);
		return;
	}
	for (int i = 1; i <= num.size(); i++) {
		string cs = num.substr(0, i);
		if (cs.size() > 1 && cs[0] == '0') {
			return;
		}
		long long curNum = atoll(cs.c_str());
		string next = num.substr(i);
		if (tmp.size() != 0) {
			fenzhi(next, tmp + "*" + cs, target, (cur - prev) + prev*curNum, prev*curNum);
			fenzhi(next, tmp + "+" + cs, target, (cur + curNum), curNum);
			fenzhi(next, tmp + "-" + cs, target, (cur - curNum), -curNum);
		}else{
			fenzhi(next, cs, target, curNum, curNum);
		}
	}
}
コード例 #3
0
void fenzhi(long n,int a[2][2])
{
	int c[2][2],b[2][2];
	if(n==0) a[0][0]=1,a[0][1]=0,a[1][0]=0,a[1][1]=1;
	else if(n==1) a[0][0]=0,a[0][1]=1,a[1][0]=1,a[1][1]=1;
	else
	{
		fenzhi(n/2,b);
		if(n%2==0) c[0][0]=b[0][0],c[0][1]=b[0][1],c[1][0]=b[1][0],c[1][1]=b[1][1];
		else c[0][0]=b[1][0],c[0][1]=(b[0][0]+b[0][1])%10000,c[1][0]=b[1][1],c[1][1]=(b[1][0]+b[1][1])%10000;
		a[0][0]=(b[0][0]*c[0][0]+b[0][1]*c[1][0])%10000;
		a[0][1]=(b[0][0]*c[0][1]+b[0][1]*c[1][1])%10000;
		a[1][0]=(b[1][0]*c[0][0]+b[1][1]*c[1][0])%10000;
		a[1][1]=(b[1][0]*c[0][1]+b[1][1]*c[1][1])%10000;
	}
}
コード例 #4
0
vector<string> addOperators(string num, int target) {
	fenzhi(num, "", target, 0,0);
	return res;
}