求数字n是几位数,并顺序及逆序输出它各个位的值

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;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值