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

如何提取数字的每一位。比如1234,然后有一个数组,分别把1、2、3、4赋进去。

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

代码如下:

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个回答  推荐于2017-10-02

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

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]);//将每位后加空格输出。
}

第2个回答  2013-11-28
对10取模-----例如a[1]=1234%10就能把4取出来
第3个回答  2013-11-28
a=1234;for(i=0;a>0;i++) { b[i]=a%10;a/=10;}

C++,如何提取数字的每一位
提取数字的每一位,可以使用取余和除法的组合来实现。代码如下:int ival;deque<int> numbers;cin >> ival;while(ival) { \/\/注意对 10 取余得到的是当前数字的最后一位 numbers.push_front(ival % 10);ival \/= 10;因为对10取余得到的是当前数字的最后一位,比如1234%10 的结果是4,所以记录...

c++中怎样提取数的每一位数字??
好办,除10取余数。比如123,123%10就是3,然后123\/10==12, 12%10就得到2, 然后再12\/10,得到1,1%10得到1

c++取整数每位数字
a%10就取得a的末位数, a\/10就删除末位.输入a之後:b=1;while(a!=0) { b=b*(a%10); a=a\/10; } 出了while的b就是答案了 main里面写public不行的

C++中我输入一行数据如何提取其中每个的数字?
用strtok include <string.h> main(){ char s[] = "1.1.2000";char *delim = ".";char *p;printf("%s ", strtok(s, delim));while((p = strtok(NULL, delim)))printf("%s ", p);printf("\\n");}

c语言中如何读取多位数每一位的数字,在V C++平台上,比如1234,具体语句...
提供一种方法供参考。将多位数转换为字符串,然后字符串里的每个字符就是对应的数位。使用itoa函数如下:include <stdio.h>#include <stdlib.h>int main (){ int i; char buffer [33]; printf ("Enter a number: "); scanf ("%d",&i); itoa (i,buffer,10); printf ("decimal:...

C++如何实现提示用户输入一个正整数,计算出该数字的位数并把找出每一...
以下程序能满足你的要求,包括逆序输出各个位数:\/ 获取数字num的长度 \/ int getLength(int num){ int i = 1;int temp = num;while(temp\/10 != 0){ ++i;temp \/= 10;} return i;} \/ 顺序输出数字num的各个位数 \/ void outputEveryNumber(int num){ int temp = num;int length = ...

c++或c解答求大神 分离整数的各个数位
您是说读入数字小于10^8吗?如果是的话是上面的程序。如果是数位小于10^8,那是下面的程序。\/ include "bits\/stdc++.h"using namespace std;const int N=100000005;char s[N];int main(){ scanf("%s",s); int l=strlen(s); for (int i=l-1;~i;--i) { putchar(s[i...

怎么使用C++来取一个数字的个位数
2. 获取十位上的数 number = number\/10; a[i] = number % 10; i++;依此类推,直到number为0 while(number>0){ a[i] = number % 10;i++;number = number \/10;} 最后利用i,把各位上的数打印出来,记得,a[]里面存放的数是倒序,即第一位是个位上的数,第二位是10位上的数。

怎么用c++输入一个数,分别输出这个数每一位上的数,例如:120,输出:1...
include<iostream> using namespace std;int main(){ int a,i,n;cout<<"输入数字的位数:";cin>>n;cout<<endl;cout<<"输入一个"<<n<<"位数:";cin>>a;for(i=0;i<n;i++){ cout<<"第"<<i+1<<"位"<<a%10<<endl;a=a\/10;} return 0;} ...

C++怎么从输入的数字中逐一读取?
用数组表示。int a[10];k=1 while(k<=d){ cin>>a[k];k++;} 这样将数组中的每一个数值进行转换就可以了。int i,n,a;k=1 while(k<=d){ k++;cin>>n;do { a=n%2;n=n\/2;cout<=1);}

相似回答