B58
案例:求幂、奇数和、统计位数
引入
章前总览 while 与 for 等价:初值放循环前,更新放循环里,条件写在 while(...)。位数题用“除以 10 砍甘蔗”。
三道案例:
- aⁿ:重复乘 a
- 奇数和:s += (2*i-1)
- 位数:while(t) { cnt++; t/=10; }
1 案例1:求 a 的 n 次方(while)
输入 a、n,输出 aⁿ。样例:2 5 → 32。
while 写法
#include <iostream>
using namespace std;
int main() {
int a, n, t = 1, i = 1;
cin >> a >> n;
while (i <= n) {
t = t * a;
i++;
}
cout << t << endl;
return 0;
}
- 对比 for:初值、条件、更新拆开写,循环体常需花括号。
- 也可用 do-while(本题 n 为正整数时结果相同)。
2 案例2:求 1+3+5+…+(2n−1)
用 while 累加奇数。答案也等于 n×n。
参考代码
#include <iostream>
using namespace std;
int main() {
int i = 1, s = 0;
int n;
cin >> n;
while (i <= n) {
s = s + (2 * i - 1);
i++;
}
cout << s << endl;
return 0;
}
- 样例:n=100 → 10000。
3 案例3:求一个整数的位数
输入正整数 n,输出位数。样例:67089 → 5。
砍甘蔗法
t%10取个位;t/=10砍掉个位。- 反复直到 t 变成 0;每次砍之前位数 +1。
- 用临时变量 t,避免破坏原来的 n(若后面还要用)。
参考代码
#include <iostream>
using namespace std;
int main() {
int n;
cin >> n;
int cnt = 0;
int t = n;
while (t) {
cnt++;
t = t / 10;
}
cout << cnt << endl;
return 0;
}
小结
while 三件套:
循环前:给循环变量初值
while (条件) {
做事;
修改循环变量; // 别忘!
}
✓
里程碑达成:
下一节练习:折纸、折半、各位数字之和。