C++,如何提取数字的每一位

如何提取数字的每一位。比如1234,然后有一个数组,分别把1、2、3、4赋进去。... 如何提取数字的每一位。比如1234,然后有一个数组,分别把1、2、3、4赋进去。 展开
 我来答
问明6E
高粉答主

2019-06-25 · 每个回答都超有意思的
知道答主
回答量:279
采纳率:100%
帮助的人:12.3万
展开全部

提取数字的每一位,可以使用取余和除法的组合来实现。

代码如下:

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);

}

风若远去何人留
推荐于2017-10-02 · 知道合伙人互联网行家
风若远去何人留
知道合伙人互联网行家
采纳数:20412 获赞数:450099
专业C/C++软件开发

向TA提问 私信TA
展开全部

有两种方法可以做到提取数字任意一位。

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
展开全部
对10取模-----例如a[1]=1234%10就能把4取出来
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
2013-11-28
展开全部
a=1234;for(i=0;a>0;i++) { b[i]=a%10;a/=10;}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式