C++ 高效实现逆序遍历

本文介绍了在C++中如何高效地进行逆序遍历数组的方法,包括获取数组长度后倒叙遍历、正序遍历配合技巧以及使用关键字`+`的独特方法。针对C++没有负数索引的问题,提供了三种实用的解决方案。

https://www.ksroido.art/

背景

作业需要,作业原题如下

同构数是其平方数的尾数等于该数自身的自然数,例如:25*25=625。从键盘输入一个不大于10000的自然数,判断其是否是同构数并按样例格式输出。

需要逆序判定对应元素相等

对于python而言,可以对数组(列表)使用负数索引,而C++数组没有负数索引的用法

对于C++则有以下几种实现方式

阅读本文前置知识

  • 掌握C++的基本语法

正文

方法一

获取数组长度之后倒叙遍历(感觉太傻了,不展开叙述)

方法二

使用.reverse()方法后正序遍历

方法三

使用auto关键字+迭代器

这个方法是笔者在作业中使用的方法

#include <iostream>
#include <string>
using namespace std;
int main(){
    int num;
    cin>>num;
    int num2=num*num;
    string str= to_string(num);//类型转换
    string str2=to_string(num2);//类型转换
    auto j=str.end()-1; //生成一个迭代器,指向尾元素的头地址
    //(end()指向尾元素的尾地址,减一之后指向的是尾元素的头地址,参见:https://blog.csdn.net/KSroido/article/details/110452448)
    for (auto i = str2.end()-1;j!=str.begin();i--) {
    //auto关键字生成迭代器
        if (*i==*j) j--;
        else{
            cout<<num<<" no,"<<num<<"*"<<num<<"="<<num2;  //输出格式要求
            break;
        }
    }
    cout<<num<<" yes,"<<num<<"*"<<num<<"="<<num2;
    return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值