题目:
解答:
bool isNarcissisticNumber(int num) {
int sum = 0;
int temp = num;
int digits = log10(num) + 1; // 计算数字的位数
while (temp != 0) {
int digit = temp % 10;
sum += pow(digit, digits);
temp /= 10;
}
return sum == num;
}
// 递归函数,将字符串分割成子串,使每个子串的ASCII码值的和均为水仙花数
void splitString(const string& s, int start, vector<int>& tmp, vector<vector<int>> &result) {
if (start == s.length()) {
result.push_back(tmp);
}
int num = 0;
for (int i = start; i < s.length(); i++) {
num += s[i];
if (isNarcissisticNumber(num)) {
tmp.push_back(num);
splitString(s, i + 1, tmp, result);
tmp.pop_back();
}
}
}
int main()
{
string str;
cin >> str;
vector<int> tmp, vector<vector<int>> result;
splitString(str,0,tmp,result);
if (result.size() == 0)
{
cout << 0 << endl;
}
else if (result.size() > 1)
{
cout << -1 << endl;
}
else
{
cout << result[0].size() << endl;
}
return 0;
}