列表

详情


NC14736. 双拆分数

描述

对于一个数字串 s,若能找到一种将其分成左右两个非空部分 s1,s2 的方案,使得:
    1、s1,s2 均无前导零
    2、存在两个正整数 a,b,使得 b 整除 a,且 a/b=s1, a*b=s2
那么我们记这是一个合法的分法。特别地,如果一个串有两个或更多个不同的合法的分法,那么我们称这个数字串是双拆分数字串。
给定一个 n,要求构造一个长度恰为 n 的双拆分数字串。如果无解,输出 -1。

输入描述

输入仅一行一个正整数 n(1 <= n <= 300)。

输出描述

仅一行一个数字串或者 -1。

示例1

输入:

8

输出:

24419764

原站题解

上次编辑到这里,代码来自缓存 点击恢复默认模板

C++(g++ 7.5.0) 解法, 执行用时: 2ms, 内存消耗: 432K, 提交时间: 2023-03-06 20:12:04

#include <bits/stdc++.h>
using namespace std;
int main()
{
	int n;
	scanf("%d",&n);
	if(n<=3) puts("-1");
	else
	{
		if(n%2==0) printf("1144"),n-=4;
		else printf("16400"),n-=5;
		while(n--) printf("0");
		printf("\n");
	}
	return 0;
}

C++11(clang++ 3.9) 解法, 执行用时: 2ms, 内存消耗: 384K, 提交时间: 2017-12-22 19:18:28

#include <cstdio>
int main()
{
	int n;
	scanf("%d",&n);
	if(n<=3) puts("-1");
	else
	{
		if(n%2==0) printf("1144"),n-=4;
		else printf("16400"),n-=5;
		while(n--) printf("0");
		printf("\n");
	}
	return 0;
}

Python(2.7.3) 解法, 执行用时: 34ms, 内存消耗: 4440K, 提交时间: 2017-12-23 21:22:32

from fractions import *
 
n = input()
if n < 4:
    print -1
elif n % 2 == 0:
    print 1144 * 10 ** (n - 4)
else:
    print 164 * 10 ** (n - 3)
exit()

Python3(3.5.2) 解法, 执行用时: 30ms, 内存消耗: 3432K, 提交时间: 2020-04-17 23:37:45

n = int(input())
if n<=3:
    print(-1)
elif n%2 == 0:
    print(1144*10**(n-4))
else:
    print(16400*10**(n-5))

上一题