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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C语言中如何将一个数字的各个位上的数分别提取?相关的知识,希望对你有一定的参考价值。

C语言中如何将一个未定的多位数字的各个位上的数字单独提取出来呢?能否给出具体的语句?(以 Visual C++ 6.0 为平台) 谢谢!!!

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

第一:数学方法,对于任意一个数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]);

结果和上面一样!

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

参考技术A

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;

参考技术B

#include<stdio.h>

int main()

int a;

int b[111]=0;//这里数组必须赋于初值,不然系统会随机赋值,将输出错误!赋值任何数              

scanf("%d",&a);//都行!

int i=0;

while(a!=0)


b[i]=a%10;            //将各个位的数赋值于数组b[i] ; 

a/=10;           //现在数组b[i]记录的是各个位上的数的反序; 

i++;            //i记录这个数是几位数 ; 

for(int j=i-1;j>=0;j--)

printf("%d ",b[j]) ;        //最后反序输出数组b[j]; 

return 0;

有不理解的地方,欢迎追问。望采纳!

参考技术C

假如有一个数为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;

参考技术D 解决步骤如下:1.首先获取这个数字的位数大小2.循环位数大小次,在循环中每次除以10,取莫,就得到了这个为的值,也就是这个位上的数字。然后保存到你的数组中,或者输出。上述思路即可解决你的问题。

C语言有效位

float的有效位为7位,这7位怎么算,包括小数点吗?是从小数点后面开始数7位,还是怎样?例如222223.523642566 输出是什么?

对于大小为32-bit的浮点数(32-bit为单精度,64-bit浮点数为双精度,80-bit为扩展精度浮点数),
1、其第31 bit为符号位,为0则表示正数,反之为复数,其读数值用s表示;
2、第30~23 bit为幂数,其读数值用e表示(就是lz所说的有效位)
3、第22~0 bit共23 bit作为系数,视为二进制纯小数,假定该小数的十进制值为x;

则按照IEEE 754的规定,该浮点数的值用十进制表示为:
= (-1)^s * (1 + x) * 2^(e - 127)

对于49E48E68来说,
1、其第31 bit为0,即s = 0
2、第30~23 bit依次为100 1001 1,读成十进制就是147,即e = 147。
3、第22~0 bit依次为110 0100 1000 1110 0110 1000,也就是二进制的纯小数0.110 0100 1000 1110 0110 1000,其十进制形式为0.78559589385986328125,即x = 0.78559589385986328125。

这样,该浮点数的十进制表示
= (-1)^s * (1 + x) * 2^(e - 127)
= (-1)^0 * (1+ 0.78559589385986328125) * 2^(147-127)
= 1872333

对于把具体的浮点值写成机器表示的IEEE浮点数的形式,过程与上面相反。另外还有NaN(Not a Number),Inf(无穷),指数为0时的非规格化数等概念,需要查看IEEE 754 标准或《深入理解计算机》这本经典著作。

参考资料:http://www.pediy.com/bbshtml/bbs3/Forum669.htm

参考技术A 注意一下,float型,有效位数是7位,但是保留6位有效小数
所以222223.523642566 输出222223.523643(最后一位四舍五入)本回答被提问者采纳
参考技术B 你理解错了,是二进制概念上的有效位,不是十进制。

你看看IEEE 754的标准就很清楚了。

以上是关于C语言中如何将一个数字的各个位上的数分别提取?的主要内容,如果未能解决你的问题,请参考以下文章

C语言如何求一个整数的各个位数之和

C语言-求三位数的水仙花数

c语言从键盘上输入一个4位整数,输出其个位、十位、百位、千位上的数字,并求和。(代码15分,调试1

如何用C语言编出 读入一个五位数,分割该数各位上的数并将分割的数字以间隔三

c语言一个数分解成独立的数字

C语言 分离 整数 成 单个 数字,求修改