华为机考OJ三道大题,总体不难,可是系统不熟悉,自己机子上能跑的,提交以后却总有点编译问题。
Q1:回文数字猜想
给出一个数字N,如68,定义它的逆数为86,那么经过68+86=154,154+451=605,605+506=1111这样几次操作后,可以得到回文数字1111。现在需要判断经过7次操作是否可以得到回文,如果能,输出回文,如果不能输出0。
思路:拆分各个位数并逆序相加,对和数判断回文。
(数字与逆序相加,如果对应位置相加不产生进位,那么结果肯定是回文;产生进位的有可能是回文,如605+506)
不考虑次数情况下的代码:
int Add2PalindromeNumber(int num) { if(num <= 0) return -1; int i = num; vector<int> numlist; numlist.push_back(i%10); i /= 10; while(i) { numlist.push_back(i%10); i /= 10; } int addnum = num; int pk = 1; for(i=numlist.size()-1;i>=0;i--) { addnum += numlist[i]*pk; pk *= 10; } if(!JudgePalindrom