蓝桥杯-整数拼接

原题:蓝桥杯2020年第十一届省赛真题-整数拼接 - C语言网
#include<bits/stdc++.h>
using namespace std;

long long int getweishu(long long int a) {	//获取a是多少位数 
	long long int num = 0;
	while (a / 10 != 0) {
		num++;
		a = a / 10;
	}
	num++;
	return num;
}

int main() {
	int begin1 = 1, begin2 = 1;
	long long int n, K;
	long long int num = 0, one = 0, allone = 0;
	cin >> n >> K;

	long long int a[10000] = {}, c[10000] = {}, d[10000] = {};
	int i, j, temp;

	for (i = 1; i <= n; i++) {
		cin >> a[i];
	}

	for (i = 1; i <= n; i++) {	//初始化a[i]是否可以被K整除
		if (a[i] % K == 0) {
			//将可被整除的数放进d中,begin2为c中数的个数 
			d[begin2++] = a[i];
			one++;
		}
		else {
			//将不可被整除的数放进c中,begin1为c中数的个数 
			c[begin1++] = a[i];
		}
	}

	for (i = one - 1; i >= 1; i--) {		//可被整除的数之间相互组合的种数
		allone += i;
	}
	allone = 2 * allone;	//所有可被除的组合起来的种数

	long long int zhishu = 0;
	for (i = 1; i < begin1; i++) {	//c不可整除 
		for (j = 1; j < begin2; j++) {	//d可整除 
			zhishu = getweishu(d[j]);
			long long int x = c[i] * pow(10, zhishu);
			//不可整除的数后面连接上可整除的数,然后判断是否可被整除
			if ((x + d[j]) % K == 0) {		
				num++;
			}
		}
	}
	
	int zhishu1,zhishu2;
	long long int temp1,temp2;
	for(i=1;i<begin1;i++){
		for(j=i+1;j<=begin1;j++){
			zhishu1=getweishu(c[i]);
			zhishu2=getweishu(c[j]);
			temp1=c[i]*pow(10,zhishu2)+c[j];
			temp2=c[i]+c[j]*pow(10,zhishu1);
			if(temp1%K==0){
				num++;
			}
			if(temp2%K==0){
				num++;
			}
		}
	}
	
	
	

	num += allone;
	cout << num;

	return 0;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
题目描述 给定两个正整数 a 和 b,将它们拼接起来得到一个新的整数。 例如,a=12,b=34,则拼接后得到的新整数为 1234。 输入格式 输入共两行,第一行为正整数 a,第二行为正整数 b。两个数字都不超过 10000 位。 输出格式 输出一个整数,表示拼接后的新整数。 样例输入 12 34 样例输出 1234 算法1 (字符串拼接) $O(n)$ 将两个整数转化为字符串,然后将它们拼接起来,最后将拼接后的字符串转化为整数输出即可。 时间复杂度 字符串拼接的时间复杂度为 O(n),其中 n 表示两个整数的位数。 空间复杂度 需要额外 O(n) 的空间存储字符串。 Python 代码 a = input().strip() b = input().strip() c = int(a + b) print(c) 算法2 (字符串迭代) $O(n)$ 根据题目要求,需要将两个整数拼接起来,可以将两个整数转化为字符串后,通过迭代的方式将两个字符串拼接起来,最后将拼接后的字符串转化为整数输出即可。 时间复杂度 字符串迭代的时间复杂度为 O(n),其中 n 表示两个整数的位数。 空间复杂度 需要额外 O(n) 的空间存储字符串。 Python 代码 a = input().strip() b = input().strip() c = '' for i in a: c += i for j in b: c += j c = int(c) print(c) 算法3 (数学运算) $O(logn)$ 根据题目要求,需要将两个整数拼接起来,可以通过数学运算实现。 设第一个整数为 a,第二个整数为 b,其位数分别为 len1 和 len2。 将第二个整数 b 乘以 10 ^ len1,然后加上第一个整数 a 即可得到拼接后的结果。 时间复杂度 时间复杂度为 O(logn),其中 n 表示两个整数的位数。 空间复杂度 只需要额外 O(1) 的空间存储变量。 Python 代码 a = input().strip() b = input().strip() c = int(b) + int(a) * (10 ** len(b)) print(c)

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值