当前位置:首页 > C++目录 > 正文内容

分离整数的各个位

亿万年的星光5年前 (2021-03-13)C++目录2880

        平常做题的时候有很多时候会遇到分离整数的各个位的操作,比如求回文数,数字反转等题目。今天简单总结一下分离整数的一些做法。

一、数字的分离(倒序)

        一般题目中,涉及数字的分离操作,比如将一个数字单独拆开,分别展示其每一位上的数字,我们一般可以像下面这样操作。

#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;
}


    扫描二维码推送至手机访问。

    版权声明:本文由青少年编程知识记录发布,如需转载请注明出处。

    分享给朋友:

    相关文章

    【题解】盈亏问题

    【题目描述】一群人团购一件物品:如果每人出 a元,所付总金额比物价多出了x 元;如果每人少出 1元,也就是每人出a-1元,所付总金额比物价少了y元。给定 a,x,y求参与团购的人数及该物品的...

    C++小项目——实时钟表

    C++小项目——实时钟表

    0.前言在很多游戏中,我们要使用时间,这个时间一个是系统当前的时间,一个是服务器给你的时间。这篇文章我们尝试做一个模拟时钟。效果图如下1.任务分解1.首先我们尝试使用easyx来画一个。基本框架如下:...

    混合背包

    1.问题定义:混合背包问题是经典背包问题的一个变种,其中物品的类型不单一,而是混合了以下三种类型:01 背包物品:每种物品最多只能选一次。完全背包物品:每种物品可以选择无限次。多重背包物品:每种物品有...

    DEVC++中的断点调试

    DEVC++中的断点调试

    1.调试程序的两种方法编程的时候经常会遇到自己的输出结果跟标准结果或者预期的结果不一样,这个时候就要用到调试程序的功能。调试程序的目的有两个,一个是找出程序中的错误,另一个是监视变量的变化。2.DEV...

    【算法】前缀和与差分(3)二维数组前缀和

    【算法】前缀和与差分(3)二维数组前缀和

    0.前言前面的一篇文章,介绍了一维数组的前缀和,这篇文章中,介绍一下二维数组的前缀和1.定义二维数组的前缀和就是按照二维数组求和。公式如下:那二维前缀和中一个f[i][j]表示的意思就是以(1,1)为...

    C++ 中的常量

    C++ 中的常量

    一、说明常量和变量是相对的概念 —— 变量是 “能变化的量”,而常量就是一旦定义就固定不变、不能修改的值。用生活里的例子类比,你就能秒懂为什么需要常量:本质是 “给固定不变的东西贴‘只读标签’,避免误...