代码如下:
#include<iostream>
#include<string>
using namespace std;
string turning_rule[15];
int num_of_turning[10] = {};
bool vis[10] = {};
int k;
struct HPN {
int num[40] = {1,1};
} ans;
void dfs(int n) {
vis[n] = true;
for(int i = 0; i < k; i += 1) {
if(turning_rule[i][0] - '0' == n && !vis[turning_rule[i][2] - '0']) {
dfs(turning_rule[i][2] - '0');
}
}
return;
}
struct HPN multiply(struct HPN a,int n) {
int x = 0;
for(int i = 1; i <= a.num[0]; i += 1) {
a.num[i] *= n;
a.num[i] += x;
x = a.num[i] / 10;
a.num[i] %= 10;
}
a.num[0] += (x == 0 ? 0 : 1);
a.num[a.num[0]] += x;
return a;
}
int main() {
string n;
cin>>n>>k;
cin.ignore();
for(int i = 0; i < k; i += 1) {
getline(cin,turning_rule[i]);
}
for(int i = 0; i <= 9; i += 1) { //对每个数字可能转变的个数进行遍历
for(int j = 0; j <= 9; j += 1) { //初始化数组
vis[j] = false;
}
dfs(i);
for(int j = 0; j <= 9; j += 1) { //统计数字个数
if(vis[j]) {
num_of_turning[i] += 1;
}
}
}
for(int i = 0; i < n.length(); i += 1) {
ans = multiply(ans,num_of_turning[n[i] - '0']);
}
for(int i = ans.num[0]; i >= 1; i -= 1) {
cout<<ans.num[i];
}
cout<<endl;
return 0;
}
#1WA提示扫描到4实际应读入9,自行下载测试点后在Devc++ embarcadero 6.3和洛谷IDE使用C++14(GCC9)o2优化开关都尝试发现输出无误
求dalao指点QAQ