C语言中如何将一个数字的各个位上的数分别提取?

如题所述

1、方法一:

我的做法是先将整型转为字符串,再将转后的字符串取需要的字符转为整型,过程说起来复杂,但是写起来只要两行代码就行了~

#include   <stdlib.h>     

#include   <stdio.h>       

int   main(void)     

{     

int   number   =   12345;     

char   string[25];     

itoa(number,   string,   10);     

printf("integer   =   %d   string   =   %s\n",   number,   string);  //将整型转换为字符创 

printf("%d",(int)string[0]-48);   //将字符串转为整型      

return   0;     

}

  

2、方法二:

int a[100];

int i;

假设x为INPUT的数

a[100]用来存放各个数位(0用来存放一共有几位,1用来存放个位,,依次)

i=0;

{a[++i]=x % 10;

x/=10;}while (x);

a[0]=i;

温馨提示:答案为网友推荐,仅供参考
第1个回答  2017-08-18

两种方案,直接用数学方法计算和转为为字符串。

第一:数学方法,对于任意一个数n,要计算第site位的数,都可以用

n/10^(site-1)%10

计算出来。比如计算123各位数:

int data=123;
printf("%d\n",data/100%10);
printf("%d\n",data/10%10);
printf("%d\n",data/1%10);

结果是:

第二:转化为字符串,这里要用到一个函数itoa。同样是计算123各个位数。

代码:

int data = 123;
char array[100];
itoa(data, array, 10);    //转化为字符串
printf("%c\n", array[0]);
printf("%c\n", array[1]);
printf("%c\n", array[2]);

结果和上面一样!

两种方式都能计算出,但是第一种方式计算未知位数的数时很麻烦,要首先计算出数的位数,相比较第二种就没那问题,只要定义足够大的数组就不存在这个问题。

第2个回答  2017-07-27

假如有一个数为n,n<65535;

万位上的数值:(n/10000)%10;

千位上的数值:(n/1000)%10;

百位上的数值:(n/100)%10;

十位上的数值:(n/10)%10;

个位上的数值:n%10;

#include <stdio.h>
#include <stdlib.h>

int main()
{
    int num=0,a[5];
    printf("input num(<=65535):");
    scanf("%d",&num);
    if(num<=65535)
    {
        printf("万:%d\n",num/10000%10);
        printf("千:%d\n",num/1000%10);
        printf("百:%d\n",num/100%10);
        printf("十:%d\n",num/10%10);
        printf("个:%d\n",num%10);
    }
    return 0;
}

第3个回答  2013-07-25
解决步骤如下:1.首先获取这个数字的位数大小2.循环位数大小次,在循环中每次除以10,取莫,就得到了这个为的值,也就是这个位上的数字。然后保存到你的数组中,或者输出。上述思路即可解决你的问题。
第4个回答  2015-09-12
我来拿分了。假设输入5位数。
#include <stdio.h>

int main()
{
int a,b1,b2,b3,b4,b5;
scanf("%d",&a);
d1=(int)a/10000;
d2=(int)(a-d1*10000)/1000;
d3=(int)(a-d1*10000-d2*1000)/100;
d4=(int)(a-d1*10000-d2*1000)/10;
d5=(int)a-d1*10000-d2*1000-d3*100;
printf("万位为:%d\n千位为:%d\n百位为:%d\n个位为:%d\n",d1,d2,d3,d4,d5);
return 0;
}
以上。
相似回答