1.求n为几位数字
利用整除10将后面的数字一个一个丢掉(除掉),然后赋值给他本身,来计算数字位数。
- for 循环
i 作为计数器
注:n/=10在判断语句的后面,若先除等,则所得位数会比实际小1,因为最后一次除等没有计数。
int CountFor(long long n)
{
if(n==0)
{
return 1;
}
int i;
for(i=0;;i++)
{
if(n==0)
{
break;
}
n/=10;
}
return i;
}
- do while 循环
创造一个计数器tmp用于计数
int CountDo(long long n)
{
if(n==0)
{
return 1;
}
int tmp=0;
do
{
n/=10;
tmp++;
}while(n!=0);
return tmp;
}
- while 循环
int CountWhile(long long n)
{
if(n==0)
{
return 1;
}
int tmp=0;
while(n!=0)
{
n/=10;
tmp++;
}
return tmp;
}
如果 n 的值是0,
则 n 是1位数字而非零位数字(若进入循环判断,则返回 0 ),
所以需要另外判断。
if(n==0)
{
return 1;
}
2.逆序输出每一位数字(不推荐使用for语句)
利用取余(对10取余所得恰好为个位)输出个位,然后丢弃个位,赋值给自己
- for 循环
用不到变量 i
void PrintReverseFor(long long n)
{
if(n<0)
{
printf("- ");
n=-n;
}
if(n == 0)
{
printf("0\n");
}
for(;n!=0;)
{
/*if(n==0)
{
break;
}*/
//可用分号中间的 n!=0 来代替
printf("%d ",n%10);//得到个位
n/=10;//丢弃个位
}
}
- do while 循环
void PrintReverseDo(long long n)
{
if(n<0)
{
printf("- ");
n=-n;
}
do
{
printf("%d ",n%10);
n/=10;
}while(n!=0);
}
- while 循环
void PrintReverseWhile(long long n)
{
if(n<0)
{
printf("- ");
n=-n;
}
if(n == 0)
{
printf("0\n");
}
while(n!=0)
{
printf("%d ",n%10);
n/=10;
}
}
如果 n 为负数,则将负号单独输出,作为标记,并取它绝对值(即它的负数)
否则输出的每一位数字都为数字本身的负数
if(n<0)
{
printf("- ");
n=-n;
}
3.顺序输出每一位数字
利用 n 整除10的它的位数减一次方,
获得其最高位(即让 n 对10的它的位数减一次方取余),
然后利用取余去掉最高位,赋值给它自己
可调用 求位数函数 Count()
例:
12345/10000=1
12345%10000=2345
- for 循环
void PrintOrderFor(long long n)
{
if(n<0)
{
printf("- ");
n=-n;
}
if(n == 0)
{
printf("0\n");
}
int tmp=Count(n);//位数
int power=pow(10.0,tmp-1);
for(;n!=0;)
{
printf("%d ",n/power);
n%=power;
power/=10;
}
}
- do while 循环
void PrintOrderDo(long long n)
{
if(n<0)
{
printf("- ");
n=-n;
}
int tmp=Count(n);
int power=pow(10.0,tmp-1);
do
{
printf("%d ",n/power);
n%=power;
power/=10;
}while(n!=0);
}
- while 循环
void PrintOrderWhile(long long n)
{
if(n<0)
{
printf("- ");
n=-n;
}
if(n == 0)
{
printf("0\n");
}
int tmp=Count(n);
int power=pow(10.0,tmp-1);
while(n!=0)
{
printf("%d ",n/power);
n%=power;
power/=10;
}
}
调用求位数函数 Count()
int tmp=Count(n);
求次方利用 函数 pow
赋值给一个整型power
pow函数为double类型!!!
输出时若为"%d",则错误(使用 “%f” 或者强制转成整型(int))
取余(%)和整除(/)时也要注意强转成整型
int power=pow(10.0,tmp-1);
错误例子
int tmp=Count(n);
for(int i=0;;i++)
{
printf("%d ",n/pow(10.0,tmp-1));//整除且输出为%d都需要整型
n%=(int)pow(10.0,tmp-1);//取余需要整型
tmp--;
}
注:
2.3.
使用 while 和 for 语句时,要加上,否则当 n 为 0 时不判断
if(n == 0)
{
printf("0\n");
return;