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]);
结果和上面一样!
两种方式都能计算出,但是第一种方式计算未知位数的数时很麻烦,要首先计算出数的位数,相比较第二种就没那问题,只要定义足够大的数组就不存在这个问题。
1、方法一:
我的做法是先将转为,再将转后的字符串取需要的字符转为整型,过程说起来复杂,但是写起来只要两行代码就行了~
#include <>
#include <>
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;
}