C++,如何提取数字的每一位
提取数字的每一位,可以使用取余和除法的组合来实现。
代码如下:
int ival;
deque<int> numbers;
cin >> ival;
while(ival) {
//注意对 10 取余得到的是当前数字的最后一位
numbers.push_front(ival % 10);
ival /= 10;
因为对10取余得到的是当前数字的最后一位,比如1234%10 的结果是4,所以记录结果的时候必须将每次取余得到的数字放到已经提取出的部分结果的前面。
对于STL容器 deque或者list,这可以通过push_front()操作来实现。如果对结果的记录不使用这种可以在序列前端插入元素的结构液正数,比如用vector来记录结果清陪,那么最后采用逆序输出也是可以的。
扩展资料:
1、循环提取方法:
代码:
while (n) {
printf("%d ", n % 10);
n /= 10;
}
putchar(10);
2、直接将数字转换为字符串,然闹首后转换为字符数组输出。
代码:
int n=12345;
char[] chars=String.valueOf(n).toCharArray();
for(int j=0;j<chars.length;j++){
System.out.print(chars[j]+" ");
}
运行效果:
3、整除法
代码:
int n=12345;
List<Integer> list=new ArrayList<Integer>();
for(int i=10000;i>=1;i/=10){
list.add(n/i);//将商添加到list中,就是当前的位数。12345/10000=1所以第一位是1
n=n-(n/i)*i;//用原来的数减去上一位的大小;12345变为2345
}
for(int x:list){
System.out.print(x);
}
有两宏谨种方法可以做到提取数字任意一位。
1 根据数学定义,利用除法和取余来获取。
整型的除法会省略掉小数部分,所以可以除以10的对应位数次幂,来达到将要取的值移动到个位的效果,再用10取余,即可得到对应数字。
比如1234,取其百位数,就可以用1234/100%10=12%10=2从而得到百位数2.
以下函数的功能为将整型正整数反序输出。原理为从低位到高位依次取出数值,并输出。
#include <stdio.h>
void reverse_int(int v)
{
while(v)
{
printf("%d", v%10);//输出个位。
v/=10; //将下一位数字移动到个位。
}
}
2 利用sprintf函数,将整型数字转为字符串,并对字符串进行处理。
sprintf的功能是格式化输出到字符串,操作类似于printf,但输出目标不是标准输出,而是字符数组。
以下函数功能为,将整型正整数按位加空帆销格输出。
#include <stdio.h>
void put_int_with_space(int v)
{
char 态绝游str[50]; //定义一个足够大的数组。
int i;
sprintf(str, "%d", v);//将v转为字符串。
for(i = 0; str[i]; i ++)
printf("%c ", str[i]);//将每位后加空格输出。
}
2013-11-28
2013-11-28