1、求一个整数的位数
2、分别输出每一位数字
3、逆序输出
//1.
#include<stdio.h>
int count(int n)
{
int tmp;
for(tmp=1;n>1;tmp++)
{
n/=10;
}
return tmp;
}
int main()
{
printf("%d\n",count(1997));
}
//2.3
#include<stdio.h>
int main()
{
int i=789,w,q,b,s,g;
if (i>9999)
{printf(“输入数字为五位数\n”);
w=i/10000;
q=i%10000/1000;
b=i%10000%1000/100;
s=i%10000%1000%100/10;
g=i%10000%1000%100%10;
printf(“个十百千万位上的数字分别为%d,%d,%d,%d,%d\n”,g,s,b,q,w);
printf(“逆序输出为%d,%d,%d,%d,%d\n”,w,q,b,s,g);
}
else if(i<9999&&i>999)
{printf(“输入数字为四位数\n”);
q=i/1000;
b=i%1000/100;
s=i%1000%100/10;
g=i%1000%100%10;
printf(“个十百千位上的数字分别为%d,%d,%d,%d\n”,g,s,b,q);
printf(“逆序输出为%d,%d,%d,%d\n”,q,b,s,g);
}
else if(i<999&&i>99)
{
printf(“输入数字为三位数\n”);
b=i/100;
s=i%100/10;
g=i%100%10;
printf(“个十百位上的数字分别为%d,%d,%d\n”,g,s,b);
printf(“逆序输出为%d,%d,%d\n”,b,s,g);
}
else if(i<99&&i>9)
{
printf(“输入数字为二位数\n”);
s=i/10;
g=i%10;
printf(“个十位上的数字分别为%d,%d\n”,g,s);
printf(“逆序输出为%d,%d,\n”,s,g);
}
else
{
printf(“输入数字为一位数\n”);
g=i;
return 0;
}
}
改进版:
题①确实需要定义一个计数器,但是用for循环没有考虑到输入的数为0的这种情况,0也是一位数,结果应为1,因此将for循环改为do while循环就能解决这一问题;
题③只需在n/10的循环中,加入对10求余的步骤,就能解决此问题;
题②实则比题③稍难一些,需要使用①的函数求出数字个数,具体方法如下:
(①-count、②-PrintOrder、③-PrintReverse)
#include <stdio.h>
int Count(int n)
{
int temp = 0;
do
{
n /= 10;
temp ++;
}while(n != 0);
return temp;
}
void PrintOrder(int n)
{
int c = Count(n);
int power = 1;
for(int i = 1;i <= c - 1 ;i ++)
{
power *= 10;
}
do
{
printf("%d ",n / power);
n %= power;
power /= 10;
}while(n != 0);
printf("\n");
}
void PrintReverse(int n)
{
int temp = 0;
do
{
printf("%d ",n % 10);
n /= 10;
}while(n != 0);
printf("\n");
}
int main ()
{
printf("%d\n",Count(0));
PrintOrder(0);
PrintReverse(0);
printf("%d\n",Count(711));
PrintOrder(711);
PrintReverse(711);
printf("%d\n",Count(47115));
PrintOrder(47115);
PrintReverse(47115);
return 0;
}
结果如下: