PAT(甲级)1024 Palindromic Number (25point(s))

悠悠 2024-05-08 06:00 197阅读 0赞
题目

题目链接

思路

题目大意:判断一个字符串是不是回文串,如果不是可以翻转后相加在判断是不是回文串;
本质是大数相加问题,大数相加需要先把数字翻转一下,将个位数字放到数组的第0号位,优点是相加的时候进位方便;

代码
  1. #include <iostream>
  2. #include <string>
  3. #include <cstring>
  4. #include <vector>
  5. #include <algorithm>
  6. using namespace std;
  7. const int maxn = 120;
  8. char s[15];
  9. vector<int> a, b;
  10. //判断是不是回文串
  11. bool judge(vector<int> v1){
  12. vector<int> v2 = v1;
  13. reverse(v2.begin(), v2.end());
  14. if(v1 == v2) return true;
  15. else return false;
  16. }
  17. int main()
  18. {
  19. scanf("%s", s);
  20. int k;
  21. scanf("%d", &k);
  22. //字符转化为数字
  23. for(int i = 0; i < strlen(s); i ++) a.push_back(s[i] - '0');
  24. int step = 0;
  25. reverse(a.begin(), a.end());
  26. while(judge(a) == false && step < k){
  27. b = a;
  28. reverse(b.begin(), b.end());
  29. int carry = 0, temp;
  30. //整数相加
  31. for(int i = 0; i < a.size(); i ++){
  32. temp = a[i] + b[i] + carry;
  33. a[i] = temp % 10;
  34. carry = temp / 10;
  35. }
  36. if(carry != 0) a.push_back(carry);//注意最后可能进一位
  37. step ++;
  38. }
  39. for(int i = a.size() - 1; i >= 0; i --) printf("%d", a[i]);
  40. printf("\n%d\n", step);
  41. system("pause");
  42. return 0;
  43. }

发表评论

表情:
评论列表 (有 0 条评论,197人围观)

还没有评论,来说两句吧...

相关阅读