文章

18

粉丝

183

获赞

57

访问

101.8k

头像
1454 反序数 获取int的每个位数+字符串前插法与尾插法思想+int转string
推荐阅读
P1454 清华大学机试题
发布于2022年8月14日 12:05
阅读数 4.4k

算法思路

使用1234和4321举例

  • 第一个循环
    • 通过取位数的算法,取出1234中的1,和4321中的4
    • 将提取出的int数转化为char
    • 对于1234中的1,采用字符串尾插法:s=s+new_char;
    • 对于4321中的4,采用字符串前插法:s=new_char+s;
  • 重复以上循环,int 1234最终化为string 1234,int 4321最终化为string 1234
  • 判断两者字符串是否相等即可

 

涉及到的算法:数字取位

  • 1234%10=4;
  • 1234/10=123;
  • 123%10=3;
  • 123/10=12;
  • ...
  • 即被除数每次要÷10,对10求模便可获得末尾
  • 如此迭代直到被除数==0

取位数模板算法

void GetIntNum(vector<int>& num,int i)
{
	while (i)
	{
		int u = i % 10;
		num.push_back(u);
		i = i / 10;
	}
	reverse(num.begin(), num.end());
}

(我自己在本题中,因为直到了是4位数,所以用的取首位的方法,一样的原理)

也可以通过转字符串方法:

int i = 0;
cin >> i;
string a=to_string(i);
vector<int> num;
for (int i = 0; i < a.size(); ++i)
{
	num.push_back(int(a[i] - '0'));
}

 

除此之外,再注意一下题目条件,即i>=1000&&9*i<10000

当然直接打表1089是最快的


下面是完整的题目代码

运用了两种方法,分别是数字取位比较和字符串直接比较。熟悉stl的话使用字符串比较会好写很多

#include <bits/stdc++.h>

using namespace std;

//整数取位法
b...
登录查看完整内容


登录后发布评论

暂无评论,来抢沙发