给一个n位的正整数,要求:(1)求出他是几位数; (2)分别输出每一位数字; (3)按逆序输出给位数字,例如原数为321,应输出123。
(1)对于一个n位正整数,要求出他是几位数,只需定义一个变量count存储这个数的位数,初始化count为0,利用while循环对整数n整除10,整除一次count加一,当n整除10为0时循环结束,函数返回值为整数位数count;
以上针对的是当n为正整数时,当n为一个整数时,分三种情况:整数、负数和0。当n为负数时,只需增加一个if语句进行判断,使n转化为正整数,然后进行正整数求位数;n为0时直接返回1即可;
代码实现如下:
int Show(int n)
{
int count=0; //存储n的位数
if(n<0) n=-n; //负数转换为正数再求位数
if(n==0) return 1; //n为0是直接返回位数为1
while(n!=0) //对正整数求位数
{
n/=10;
count++;
}
return count;
}
(2)要输出n的每一位数字,需要引用前面的求位数函数,判断他是几位数,方便判断从哪位开始输出,然后依次求出他的每一位数字并输出。先定义变量i存放n的位数,再定义一个变量a存放10^i-1,用while循环:1、对n对a整除,求出每个位数的数字并输出;2、n对a取余剔除最高位数字;3、a/=10为下趟循环做准备。
以上是针对当a为正整数时,当n为0或负数时方法和上面的方法类似,在此就不再赘述。
代码实现如下:
void Show1(int n)
{
int i=Show(n); //存放n的位数
int a=pow(10,i-1); //存放最高位的10的整数次幂求每位数字
if(n==0) //n为0时输出0
{
printf("0\n");
}
if(n<0) //n为负数时先输出负号后再输出每位数字
{
printf("-");
n=-n;
}
while(n!=0) //输出每位数字
{
printf("%d ",n/a);
n%=a;
a/=10;
}
}
注:不用a存放pow(10,i-1)而直接使用【n%=pow(10,i-1);i–;】时,会发生数据类型不匹配的错误。
(3)按逆序输出给位数字,例如原数为321,应输出123。输出n的每位数字只需利用while循环对n%10并输出,然后n/=10为下趟循环准备,n=0时循环结束。
当n为0或负数时和以上方法类似。
代码实现如下:`
void Show2(int n)
{
if(n==0) //n为0时输出0
{
printf("0\n");
}
if(n<0) //n为负数时先输出负号后再输出每位数字
{
printf("-");
n=-n;
}
while(n!=0) //输出每位数字
{
printf("%d ",n%10);
n/=10;
}
}
主函数:
int main()
{
printf("%d\n",Show(123456)); //统计位数
Show1(654123); //顺序输出每位数字
Show2(654321); //逆序输出每位数字
}