目录
以上就是我的方法,如果大家有更好的方法或者改进我的代码,请在评论区留言,希望大家积极投票!
更新日志:2024.2.17 23:33 新增
两部分
分离数位法
传统分离数位法
代码思路
假设输入为百位数
- 定义变量
- 读入
- 将读入的数对100除,得到百位
- 将这个数减去 百位×100
- 将新得到的数对10除,得到十位
- 注意这里就不用在对这个数操作
- 将这个数对10取余
- 成功分离数位
传统方法正确代码(假设这个数是百位数)
#include <iostream>
using namespace std;
int main(){
int n;
cin>>n;
//假设这个数是百位数
int b,s,g;
b=n/100;
n-=b*100;
s=n/10;
g=n%10;
cout<<b<<s<<g;
return 0;
}
大家一看就知道什么问题,要是这个数是1000,10000,甚至一个亿怎么办?
新分离数位法
以下方法主要组成为字符串和to_string方法解决,to_string(int _val)方法是将一个int类型转换为一个字符串类型,也就是string。但是字符串如何再变回int呢?我想到的是将字符串每个字符分别减去'0'存入定义好的int数组。
代码思路如下
- 定义变量(必须有一个输入变量,一个大一点的数组,最重要的是一个字符串)
- 读入这个数(i)
- 字符串(s)接收i
- 将s每个字符分别减去'0'存入定义好的int数组(a)
- 正序输出a数组
正确代码
#include <iostream>
using namespace std;
string s;
int i,a[10000000];//a数组可以定义大一点,只要不超过数组上线就可以
int main(){
cin>>i;
s=to_string(i);
for(int i=0;i<s.size();i++) a[i]=s[i]-'0';
for(int i=0;i<s.size();i++) cout<<a[i];
return 0;
}
新数位分离法优化
思路如下
以上代码有个缺陷,那么就是数组大小的的问题,于是我想用动态数组(vector)来优化一下。
错误不完美代码如下
#include <iostream>
#include <vector>
using namespace std;
string s;
int i;
vector<int > a;
int main(){
cin>>i;
s=to_string(i);
for(int i=0;i<s.size();i++) a.push_back(s[i]-'0');
for(int i=0;i<s.size();i++) cout<<a[i];
return 0;
}
为什么说他不完美呢,是因为int存储是有上线,所以,再次改进。
较完美代码如下
#include <iostream>
#include <vector>
using namespace std;
string s;
int i;
int main(){
cin>>i;
s=to_string(i);
for(int i=0;i<s.size();i++) cout<<s[i]-'0';
return 0;
}