算法竞赛2022年第十三届蓝桥杯C++ B组_X 进制减法
/*
321=
3*20+
2*2+
1
=65
*/
#include<iostream>
#include<algorithm>
using namespace std;
const int M = 100010, mod = 1000000007;
typedef long long LL;
int a[M]={0,0, 4,10 }; // a[] 存储A各位数字
int b[M]={0,0,2,1}, w[M]; // b[] 存储B各位数字 w[] 存储各位的进制
int n;
int Ma, Mb;
LL weight[M]; // 各位数字的实际权重
LL A, B;
int main(){
// cin >> n; // 最大进制
n=11;
//cin >> Ma;
Ma=3;
//for(int i = Ma; i >= 1; i --) cin >> a[i];
//cin >> Mb;
Mb=3;
//for(int i = Mb; i >= 1; i --) cin >> b[i];
// 确定各位进制 w[i]
int MM = max(Ma, Mb); // A B 中最大的位数
for(int i = MM;i >= 1; i --){
w[i] = max(2, max(a[i], b[i]) + 1);
}
// 计算权重
weight[1] = 1;
for(int i = 2; i <= MM;i ++){
weight[i] = w[i - 1] * weight[i - 1] % mod;
}
// 计算A
for(int i = Ma; i >= 1; i --){
A = (A + a[i] * weight[i]) % mod;
}
// 计算B
for(int i = Mb; i >= 1; i --){
B = (B + b[i] * weight[i]) % mod;
}
// A - B
cout << (A - B + mod) % mod << endl;
return 0;
}