1,计算9+99+999+ +9999999999(10个9)
方法一 每个数都是上一个数乘10加9
#include <iostream>
using namespace std;
int
main(){
long
long
num=
0
,sum=
0
;
for
(
int
i=
1
; i<=
10
; i++){
num=num*
10
+
9
; //0+9;90+9;900+99;...
sum+=num;
}
cout<<sum;
return
0
;
}
方法二 每个数都是10的n次方-1
#include <iostream>
using namespace std;
#include<cmath>
int main() {
long long sum = 0;
for(int i=1;i<=10;i++)
{
sum +=pow(10,i)-1;
}
cout<<sum<<endl;
return 0;
}
2.小球开始h,每次反弹高度都是原来的一半,求反弹n次的距离和反弹高度,如100 1,输出结果100.0 50.0
int main() {
// 下落的高度和落地的次数
double h;
int n;
cin >> h;
cin >> n;
double sum = 0;
while(n){
sum = sum+h; //下降高度累加
h = h/2; //反弹高度(下次上升高度)
if(--n)
sum = sum+h; //上升高度累加
}
cout <<fixed<<setprecision(1)<<sum<<" "<<h;
return 0;
}
小球先下降,再判断下次反弹高度,根据反弹高度确定下次要上升的高度。而停止的时候,只需要下降高度累加,和上升高度,不需要把上升高度累加,所以下降高度和上升高度是在一个判断里的,而且要先于上升高度累加。
上升高度累加停止在--n的时候(可以用3举例,反弹到第三次不再上升,即3减到0时,假值,停止上升),这个时候n已经进行了-1操作,再让他去控制下降高度让他别执行,那么下降高度就可以用n约束,每次--n后再赋给n。大家有没有想过为什么要先控制上升高度累加,这是因为我们要用反弹值,也就是h/=2,所以上一轮得出这一轮需要上升的高度后,我们再拒绝他上升,就可以既不累加,但可以保留这个高度了。
执行顺序:先下降再上升
终止顺序:先终止上升,再终止下降