题解分享
题解分享简介
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
1
X 进制减法(编程题) - 题解
```
#include <bits/stdc++.h>
using namespace std;
const int N = 1e5 + 10;
long long n, ma, num[N], ma_, num_[N], ans;
int main(void) {
ios::sync_with_stdio(false), cin.tie(0), cout.tie(0);
cin >> n >> ma;
for (int i = ma - 1; i >= 0; i --) cin >> num[i];
cin >> ma_;
for (int i = ma_ - 1; i >= 0; i --) cin >> num_[i];
long long base = 1;
for (int i = 0; i < ma; i ++) {
long long cur = max(num[i], num_[i]) + 1;
if (cur < 2) cur = 2;
ans += ((num[i] - num_[i]) * base);
ans %= 1000000007;
base *= cur;
base %= 1000000007; //防止base多次乘导致溢出
}
cout << ans % 1000000007 << endl;
return 0;
}
```
查看全文
0
0
0
0



