c++新发现:再也不用传统分离数位,新的分离数位法来了

目录

分离数位法

传统分离数位法

代码思路

传统方法正确代码(假设这个数是百位数)

新分离数位法

代码思路如下

正确代码

新数位分离法优化

思路如下

错误不完美代码如下

较完美代码如下

以上就是我的方法,如果大家有更好的方法或者改进我的代码,请在评论区留言,希望大家积极投票!


更新日志:2024.2.17 23:33 新增

错误不完美代码如下

较完美代码如下

两部分

分离数位法

传统分离数位法

代码思路

假设输入为百位数

  1. 定义变量
  2. 读入
  3. 将读入的数对100除,得到百位
  4. 将这个数减去 百位×100
  5. 将新得到的数对10除,得到十位
  6. 注意这里就不用在对这个数操作
  7. 将这个数对10取余
  8. 成功分离数位

传统方法正确代码(假设这个数是百位数)

#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数组。

代码思路如下

  1. 定义变量(必须有一个输入变量,一个大一点的数组,最重要的是一个字符串)
  2. 读入这个数(i)
  3. 字符串(s)接收i
  4. 将s每个字符分别减去'0'存入定义好的int数组(a)
  5. 正序输出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;
}

以上就是我的方法,如果大家有更好的方法或者改进我的代码,请在评论区留言,希望大家积极投票!

  • 13
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值