返回题解分享
讨论 / 题解分享/ 帖子详情

X 进制减法(编程题) - 题解

暴力

#include<bits/stdc++.h>
#include<vector>
using namespace std;

typedef long long ll;
const int N = 1e5 + 10,MOD = 1e9 + 7;
ll a[N],b[N];

/*
解法:通过观察可得,每一位的进制 = max(max(a[i],b[i])+1,2) 
同时为了个位对齐,所以需要将a,b数组逆序存储 
*/

int main()
{
	ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);//取消同步流,让C++代码更快
	
	int mx,m,n;//mx为最高进制,A的位数为m 和 B的位数为n 
	cin>>mx>>m;
	//先逆序存储A 
	for(int i = m;i >= 1;i--)
	{
		cin>>a[i];
	}
	cin>>n;
	//再逆序存储B
	for(int i = n;i >= 1;i--)
	{
		cin>>b[i];
	}
	ll ans = 0;//存储A-B的结构 
	ll w = 1;//w存储每一位的权重 
	ll t;//存储每一位的进制
	for(int i = 1;i <= max(m,n);i++)
	{
		t = max(max(a[i],b[i])+(ll)1,(ll)2);//计算每一位的进制
		ans = (ans+(a[i] - b[i])*w) % MOD;//计算当前位置减法后转化为10进制的结果 
		w = (w * t) % MOD;//计算每一位的权重 
	} 
	cout<<ans % MOD;
	
	return 0;            
}
0 回复 0 转发 1 喜欢 0 阅读
回复 (0)
默认 最新
暂无回复,快来抢沙发!