---------------------------------------start reading-------------------------------------------------
问题:任意输入一个整数,求这是一个几位数字?
思路:每次除以10,则去掉一位数,统计一次。经过循环,直到最后一位数,除以10为0,停止循环,停止统计。
代码:
(1)使用for循环
#include<stdio.h>
int Count(int n)
{
int i;
if(n==0)
{
i=1;
}
for(i=0;n!=0;i++)
{
n/=10;
}
return i;
}
int main()
{
printf("这是一个 %d 位数",Count(123456));
return 0;
}
(2)使用do–while循环
int Count(int n)
{
int tmp=0;
do
{
n/=10;
tmp++;
}
while(n!=0);
return tmp;
}
区别:若使用for循环则需要特别考虑无法进入循环的数字“0”,do–while循环则始终会执行一次,至少统计一次,所以不需要单独讨论“0”
问题引申:用20进制表示123,则为几位数?
用5进制表示123,则为几位数?
解决关键:如上述题,用十进制表示,统计位数,每次除以十。
本题用20进制则除以20,用5进制表示则除以5。
10进制 123=1*(102)+2*(101)+3*(100) 三位数
5进制 123=4*(52)+4*(51)+3*(50) 二位数
20进制 123=6*(201)+3*(200) 三位数
------------------------------------------------End-------------------------------------------------------