对任意一个数字串,求出它数位上的偶数个数、奇数个数、数位总数,然后拼接起来得到一个新的数字串(不需要去掉前导零),接着对这个新的数字串同样执行上面的步骤,最终一定会得到123,也就是著名的西西弗斯串。
现有一个数字串n,可以对它执行零或正数次上面的步骤,请计算至少需要多少次可以得到西西弗斯串。
思路很简单,就是简单模拟就行。
不过有个小坑点,我们得到了奇数位数、偶数位数、总位数,如何将int转成string类型?
是直接 s = num +‘0’?如果num<10是可以这样,但如果>10,转换结果将出错。
正确做法其实还是应该对num求每一位上的数字,然后赋值给字符串。
不过string函数里提供了一个直接转换的函数:to_string(num)
具体代码如下:
#include <iostream>
#include <string>
using namespace std;
string s;
int main(){
cin>>s;
int count = 0;
while(s!="123"){
int oushu=0,jishu=0;
int weishu = s.length();
for(int i=0;i<s.length();i++){
if((s[i]-'0')%2==0){
oushu++;
}
else{
jishu++;
}
}
s.clear();
//s += oushu+'0';//不可以是单纯的加0,因为当超出了10之后,+0是不正确的。
//s += jishu;
//s += weishu;
//还是应该利用int to string函数
s = to_string(oushu)+to_string(jishu)+to_string(weishu);
count++;
}
cout<<count<<endl;
return 0;
}