C语言学习-翁凯(第四章笔记)

C语言

第四章

4.1.1循环

数数几位数
  • 程序要读入一个4位以下(含4位)的正整数,然后输出这个整数的位数。如:
  • 输入352.输出:3
人VS计算机
  • 人的方式:眼睛一看就知道了
    • 352->3位!
  • 计算机的方式:判断数的范围来决定它的位数
    • 352∈[100,999]->3位
    • 人不擅长,因为人对数字的计算能力比文字弱
程序实现
int x;
int n = 1;

scanf("%d",&x);

if(x>999){
   
    n = 4;
}else if(x>99){
   
    n = 3;
}else if(x>9){
   
    n = 2;
}else{
   
    n = 1;
}

printf("%d\n",n);
  • 因为题目明确了4位数及以下的正整数,所以可以简化一些判断
  • 因为从高处往下判断,所以不需要判断上限了
    • 反过来不行
  • 问题:任意范围的正整数怎么办?
    • 不可能每多加一位数就多加一个if,这样下去无穷尽也
换个方式想
  • 352->3 很快
    • 123812843267518273618273612675317是几位数?
  • 数数!
数数
  • 123812843267518273618273612675317
  • 人怎么数?从左往右数,一次划掉一个数字
  • 计算机怎么划掉那个数字呢?
三位数逆序的题
  • 352
    • 352%100 ->52
  • 那么123812843267518273618273612675317%100000000000000000000000000000000->23812843267518273618273612675317
  • 怎么得到那100000000000000000000000000000000?
人VS计算机
  • 如果换一下,从右边开始划
  • 123812843267518273618273612675317/10->12381284326751827361827361267531
  • 去掉最右边的数,然后?
  • 不断地划,直到没数可以划…
    • 在这个过程中计数
试试代码
int x;
int n=0;

scanf("%d",&x);

n++;
x/10;
if(x>0){
   
    n++;
    x/=10;
    if(x>0){
   
        n++;
        x/=10;
        if...
    }
}
printf("%d",n);
  • 这样还是没完没了,因此需要用到while
int x;
int n=0;

scanf("%d",&x);

n++;
x/10;
  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

拾叶King

非常感谢您的支持和认同!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值