统计数字位数
#define _CRT_SECURE_NO_WARNINGS//这里就是一个宏定义,因为我用的是VS2022,用scanf函数时会出现不安全的问题,加上这个宏定义就好了,也可以用scanf_s函数避免此问题
#include<stdio.h>
int main()
{
int n;
scanf("%d", &n);
int bit=1;//bit用来记录位数
while (n/10!=0)//这里有一个边界问题,我通常是通过代一个边界数来验证对错
{
n /= 10;
bit++;
}
printf("%d位\n", bit);
return 0;
}
逆序输出
在这里要求复数输出的话负号要给第一个数字,例如-12345,输出结果应为-5 4 3 2 1
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
int main()
{
int n;
scanf("%d", &n);
if (n == 0)//0比较特殊,当n为0时下方循环时就不进入循环了,所以可以把0这种情况单独拿出来处理
{
printf("0\n");
}
else if (n < 0)
{
n = -n;
printf("-");
}
while (n)
{
printf("%d ", n % 10);
n /= 10;
}
return 0;
}
下面是另一种处理0这种特殊情况的方法
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
int main()
{
int n;
scanf("%d", &n);
if (n < 0)
{
n = -n;
printf("-");
}
do
{
printf("%d ", n % 10);
n /= 10;
}while (n);
return 0;
}
因为这里do while循环是先循环一次再来判断,刚好可以用来判断边界问题
顺序输出
顺序输出的思路就是我们要得到最高位,需要知道这个数的位数bit,然后用这个数n/10^(bit-1)就行了,然后得到第二位时,我们需要知道舍弃了最高位后的数,就是n%=10^(bit-1),然后就再用n/10^(bit-2)就可以了...
这里也是要求复数的负号要给第一个输出的数,例如-12345输出结果为-1 2 3 4 5
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
int main()
{
int n;
scanf("%d", &n);
int bit = 1;
if (n < 0)
{
n = -n;
printf("-");
}
int n1 = n;
while (n / 10 != 0)
{
n /= 10;
bit++;
}//到这里就得到了这个数的位数
int pro=1;//这里的pro用来记录10^bit以及10^(bit-1)...
for (int i = 1; i < bit; i++)
{
pro *= 10;
}
while (pro)
{
printf("%d ", n1 / pro);
n1 %= pro;
pro /= 10;
}
return 0;
}
在求10^bit时,也可以用pow这个库函数,引用这个函数需要引用math.h这个头文件
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<math.h>
int main()
{
int n;
scanf("%d", &n);
int bit = 1;
if (n < 0)
{
n = -n;
printf("-");
}
int n1 = n;
while (n / 10 != 0)
{
n /= 10;
bit++;
}
int pro= pow(10, bit-1);
while (pro)
{
printf("%d ", n1 / pro);
n1 %= pro;
bit--;
pro = pow(10, bit-1);
}
return 0;
}