1.给定一个整数可能为正,0,负数,统计这个数据的位数.例如1234567输出7位; -12345678输出8位;0
输出1位
采用丢弃个位的方法
代码如下
int main()
{
long long n;
scanf("%lld", &n);
int count = 0;//统计位数
do\\do while至少可以实现一次循环,当为0时可输出位数为一+
{
count++;
n /= 10;
} while (n != 0);
printf("%d\n", count);
return 0;
}
2.给定一个整数可能为正,0,负数,逆序输出这个数据的每一位.
逆序输出
需要获取输入数字的个位,后丢弃个位,重复该动作然后丢弃“新个位”,直至完成输出。
这里我们分别用到
%, / 进行实现;
例如
1234567
输出
7 6 5 4 3 2 1
例如
-12345678
输出
-8 7 6 5 4 3 2 1
![](https://img-blog.csdnimg.cn/484503b2d15c49cfa910717a3d5c5abd.png)
代码如下:
int main()
{
long long n;
scanf("%lld", &n);
if (n < 0)\\为负数时因逆序输出数字,所以将负号单独提出,并取正数
{
printf("-");
n = -n;
}
if (n == 0)
{
printf("0\n");
return 0;
}
while (n != 0)\\循环也可用do while 循环
{
printf("%d ", n % 10);//得到个位数字
n /= 10;//丢弃个位数字
}
return 0;
}
逆序输出其他方法
运用指针,因对指针掌握并不熟练,不做过多解释,代码注释中含有部分解释
int main()
{
int num,*p,total=0;
scanf("%d",&num);
*p=1;//初始指针为1,若输入“0”,即为一位
num=abs(num);//取绝对值
while(num){
*p=num%10;//逆序将每一位数字赋给指针
num=num/10;
if(num){
*p++;//指针移向下一位,当num==0时不向下移动,不加if判断,最后会将指针*p移向一个空的地址,存储数据未知
}
total++;
}
if(num==0){
total=1;
}
printf("total=%d\n",total);
for(int i=0;i<total;i++){
printf("%d",*p);//从后向前逐个输出
*p--;
}
return 0;
}
3.给定一个整数可能为正,0,负数,顺序输出这个数字的每一位
从逆序输出中可以得出我们要获取每位数字后丢弃该位数字;因此我们想用什么方法能获取最高位,并丢弃最高位。
这里一个n位数获取最高位可以除10的(n-1)次方,丢弃该位时可以对其取10的(n-1)次方的余数。
我们这里用pow函数来获取除数,解释如下图:
int main()
{
long long n;
scanf("%lld", &n);
if (n == 0)
{
printf("0\n");
return 0;
}
else if (n < 0)
{
printf("-");
n = -n;
}
int count = 0;//统计位数
long long m = n;
while (m != 0)//得到m的位数
{
count++;
m /= 10;//丢弃个位
}
int power = pow(10, count - 1);//如果n==123456,power=100000
while (n != 0)
{
printf("%d,", n / power);//输出最高位
n %= power;//丢弃最高位
power /= 10;
}
return 0;
}