分离整数的各个位
平常做题的时候有很多时候会遇到分离整数的各个位的操作,比如求回文数,数字反转等题目。今天简单总结一下分离整数的一些做法。
一、数字的分离(倒序)
一般题目中,涉及数字的分离操作,比如将一个数字单独拆开,分别展示其每一位上的数字,我们一般可以像下面这样操作。
#include<iostream>
using namespace std;
int main(){
int x; //读入我们要分解的数字
cin>>x;
while(x){
int tmp= x%10; //取出个位数
cout<<tmp<<" ";
x=x/10; //缩小10倍
}
return 0;
}运行效果是:
需要注意的是,这种分离方式只能保证一个数字一个数字。举例说明,有的人分离123后变成321,认为是“三百二十一”,直接用来计算,这是非常容易犯的一个错,所以上面的程序中我加了空格用来区分。
二、带权的数字分离(倒叙)
上面一种情况,我们分离的数字就是单纯的数字,没有带权的数字,也就是分离过程中,没有实现“三百二十一”的效果。下面这个程序可以简单实现分离过程中和分离后的效果带有权值。
#include<iostream>
using namespace std;
int main(){
int x,tmp=0,ans=0; //读入我们要分解的数字
cin>>x;
int q=0; //权值,初始为0
while(x){
tmp= x%10; //取出个位数
ans=ans*q+tmp; //权值一开始为0,后面都是10
x=x/10;
q=10; //权值变为10
}
cout<<ans;
return 0;
}效果:
输入:12345678
输出:87654321
三、用字符数组处理
做题中可能会遇到这样一类题目,给定的数字中含有0,不是“10032”这种,而是“0040302”这种用数字0开头的。这个时候如果用上面的这种处理方式就会有问题,因为无法正常处理以0开头的数字,这个时候就要用到字符数组了。
//正序输出
#include<iostream>
#include<cstring>
using namespace std;
char x[100]; //用来存数字的字符数组
int main(){
cin>>x;
int length=strlen(x); //字符数组长度
for(int i=0;i<strlen(x);i++)
{
cout<<x[i]<<" ";
}
return 0;
}上面的版本可以正序输出,下面的版本可以倒叙输出
//倒序输出
#include<iostream>
#include<cstring>
using namespace std;
char x[100]; //用来存数字的字符数组
int main(){
cin>>x;
int length=strlen(x); //字符数组长度
for(int i=length-1;i>=0;i--)
{
cout<<x[i]<<" ";
}
return 0;
}四、字符串处理
如果处理过程中,遇到了数据量比较大的情况,字符数组可能不好用了怎么办, 这个时候可以选用字符串进行操作,原理同字符数组一样,不过更灵活。
//正序输出
#include<iostream>
#include<cstring>
using namespace std;
string x;
int main(){
cin>>x;
for(int i=0;i<x.size();i++)
{
cout<<x[i]<<" ";
}
return 0;
}同样,倒叙也可以正常输出。
//正序输出
#include<iostream>
#include<cstring>
using namespace std;
string x;
int main(){
cin>>x;
for(int i=x.size()-1;i>=0;i--)
{
cout<<x[i]<<" ";
}
return 0;
}扫描二维码推送至手机访问。
版权声明:本文由青少年编程知识记录发布,如需转载请注明出处。



