C语言中如何将一个数字的各个位上的数分别提取?
两种方案,直接用数学方法计算和转为为字符串。
第一:数学方法,对于任意一个数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]);
结果和上面一样!
两种方式都能计算出,但是第一种方式计算未知位数的数时很麻烦,要首先计算出数的位数,相比较第二种就没那问题,只要定义足够大的数组就不存在这个问题。
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;
#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;
}
有不理解的地方,欢迎追问。望采纳!
假如有一个数为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;
}
2013-07-25