[信息与未来 2015] 加数
题目描述
给出一个正整数
n
n
n,在
n
n
n 的右边加入
⌊
n
2
⌋
\left\lfloor\dfrac n2\right\rfloor
⌊2n⌋,然后在新数的右边
再加入
⌊
⌊
n
2
⌋
2
⌋
\left\lfloor\dfrac{\left\lfloor\dfrac n2\right\rfloor}2\right\rfloor
2⌊2n⌋
,一直这样进行下去,直到加入的数为
0
0
0 为止(注意,
0
0
0 不应当被加入)。
求加数结束后新数的长度。
输入格式
一行一个整数 n n n。
输出格式
一行一个整数,为加数结束后新数的长度。
样例 #1
样例输入 #1
37
样例输出 #1
8
提示
样例解释
- ⌊ 37 2 ⌋ = 18 \left\lfloor\dfrac{37}2\right\rfloor=18 ⌊237⌋=18,加到 n n n 的右边成为 3718 3718 3718;
- ⌊ 18 2 ⌋ = 9 \left\lfloor\dfrac{18}2\right\rfloor=9 ⌊218⌋=9,加到新数的右边成为 37189 37189 37189;
- ⌊ 9 2 ⌋ = 4 \left\lfloor\dfrac{9}2\right\rfloor=4 ⌊29⌋=4,加到新数的右边成为 371894 371894 371894;
- ⌊ 4 2 ⌋ = 2 \left\lfloor\dfrac{4}2\right\rfloor=2 ⌊24⌋=2,加到新数的右边成为 3718942 3718942 3718942;
- ⌊ 2 2 ⌋ = 1 \left\lfloor\dfrac{2}2\right\rfloor=1 ⌊22⌋=1,加到新数的右边成为 37189421 37189421 37189421;
- ⌊ 1 2 ⌋ = 0 \left\lfloor\dfrac12\right\rfloor=0 ⌊21⌋=0,加数结束,最后得到的数是一个 8 8 8 位数。
数据范围
1 ≤ n ≤ 1 0 5 1\le n\le10^5 1≤n≤105。
C++实现
#include
using namespace std;
int main(){
ios::sync_with_stdio(false);
int n;
cin>>n;
string ans=to_string(n);
while(n){
int t=n/2;
if(t>0){
ans = ans+to_string(t);
}
n=n/2;
}
cout<<ans;
return 0;
}
后续
接下来我会不断用C++来实现信奥比赛中的算法题、GESP考级编程题实现、白名单赛事考题实现,记录日常的编程生活、比赛心得,感兴趣的请关注,我后续将继续分享相关内容
标签:lfloor,right,信奥,dfrac,rfloor,加数,打卡,left From: https://blog.csdn.net/rogeliu/article/details/144402665