• 【算法竞赛入门练习题】判断输入的数字是否为回文数字的俩种方法,数字逆置的方法


    题目一:

    码蹄集 (matiji.net)

    解题思路:

    采用 “ 双指针 ” 的思路去解题

    回文数是一个在反转时保持不变的数,比如 :121,7等

    参考代码:

    1. #include
    2. using namespace std;
    3. int main( )
    4. {
    5. char arr[100] = {'0'};
    6. cin >> arr;
    7. int length = strlen(arr);
    8. int begin = 0,end = length-1;
    9. while(begin < end)
    10. {
    11. if(arr[begin] == arr[end])
    12. {
    13. begin++;
    14. end--;
    15. }
    16. else
    17. {
    18. cout << "N" << endl;
    19. return 0;//这里不建议使用 break 来终止循环
    20. }
    21. }
    22. cout << "Y" << endl;
    23. return 0;
    24. }

    题目二:

    码蹄集 (matiji.net)

    解题思路:

    • 先利用 string 流存放最先输入的整数,

    这是为了可以通过 for 循环将输入的整数的各位数字之和求出;

    • 回文数字的判断方法有俩种:

    一种是通过字符数组,

    另一个方法是将数据逆置过来,然后再与原数比较

    • 该题通过第二种解法求解

    • 数据逆置的方法:

    方法一:

    方法二:

    均见下面的参考代码

    参考代码一(包括数据逆置方法一): 

    1. #include
    2. using namespace std;
    3. int main( )
    4. {
    5. string data ;
    6. cin >> data;
    7. int new_data = 0;
    8. for(int i = 0;i < data.length();i++)
    9. {
    10. new_data += data[i] - '0';
    11. }
    12. //要将数据逆置过来然后与原数据比对看是否为回文数字
    13. int rev = 0;
    14. int change = new_data,compare = new_data;
    15. int count = 0;
    16. while(change)//求出该数一共由几位数组成
    17. {
    18. count++;
    19. change /= 10;
    20. }
    21. int tmp = pow(10,count-1);
    22. while(new_data)
    23. {
    24. rev = rev + (tmp * (new_data % 10));
    25. tmp /= 10;
    26. new_data /= 10;
    27. }
    28. if(rev == compare)
    29. cout << "YES" << endl;
    30. else
    31. cout << "NO" << endl;
    32. return 0;
    33. }

    参考代码二(包括数据逆置方法二):

     

    每一次均将等式右边的数值作为下一次表达式中的左值,

    然后对其乘以 10,

    再加上每一次的末尾数字 

    1. #include
    2. using namespace std;
    3. int main( )
    4. {
    5. string data ;
    6. cin >> data;
    7. int new_data = 0;
    8. for(int i = 0;i < data.length();i++)
    9. {
    10. new_data += data[i] - '0';
    11. }
    12. //要将数据逆置过来然后与原数据比对看是否为回文数字
    13. int rev = 0;
    14. int tmp = 0;
    15. int compare = new_data;//用作最后的比较使用
    16. while(new_data)//数据逆置方法二的核心
    17. {
    18. rev = tmp * 10 + (new_data%10);
    19. tmp = rev;
    20. new_data /= 10;
    21. }
    22. if(rev == compare)
    23. cout << "YES" << endl;
    24. else
    25. cout << "NO" << endl;
    26. return 0;
    27. }

  • 相关阅读:
    图片转pdf,图片转pdf在线转换,在线图片转pdf
    当生成式AI遇到业务流程管理,大语言模型正在变革BPM
    HTML CSS
    云安全是什么样子的?一文给你全说明白!
    Mysql 5.7.X 小版本升级
    线性代数学习笔记3-4:描述线性变换的空间压缩情况(列空间、秩)
    前端Vue-vue-element-admin-router.addRoutes
    Java 内存模型,或许应该这么理解
    【计算机视觉|人脸建模】PanoHead:360度几何感知的3D全头合成
    Java设计模式之迭代器模式
  • 原文地址:https://blog.csdn.net/m0_64075307/article/details/126645624