给定一个数字,和允许翻转后相加的次数cnt,求要多少次才能变成一个回文数字,输出那个回文数字和翻转相加了多少次,如果本身就是回文数字就输出0次,如果超过给定的次数cnt了,就输出那个不是回文的结果,并且输出给定的次数cnt。
基本思路用字符串完成大整数的相加 *** 作。
可以通过对字符串翻转后比较来判断是否为回文串。
#includeusing namespace std; string s;//适中作为每次循环的初始串 void add(string t){ int carry=0;//进位 //大整数运算 for (int i = 0; i < t.length(); ++i) { // cout< '9'){ s[i]=s[i]-10; carry=1; } } //考虑最高位的进位 if(carry==1) s=s+'1'; //反转最后的结果 reverse(s.begin(),s.end()); } int main(){ int cnt,i;//允许反转的次数,当前是第几次反转(从0开始) cin>>s>>cnt; //进行反转 *** 作 for (i = 0; i < cnt; ++i) { string t=s; reverse(t.begin(),t.end()); //如果s已经是回文串或者反转的次数用尽,退出 if(s==t||i==cnt) break; //进行大整数相加的操作 add(t); } //输出 cout< 欢迎分享,转载请注明来源:内存溢出
评论列表(0条)