问题描述
给出一个正整数n(1≤n≤100000)。在n的右边加入n的一半,然后在新数的右边再加入n的一半的一半,一直进行,直到不能再加为止。
例如 n=37 37的一半为18(取整数)加到n的右边成为
3718 18的一半为9,加到新数的右边成为
37189 9的一半为4,加到新数的右边成为
371894 4的一半为2,加到新数的右边成为
3718942 2的一半为1,加到新数的右边成为
37189421 1的一半为0,加数结束,最后得到的数是一个8位的数
输入
整数n
输出
加数结束后新数的长度。
样例
输入
37
输出
8
说明
来源
2015江苏省青少年信息学奥林匹克竞赛复赛
编辑代码
语言 C++
代码:
#include<bits/stdc++.h>
#include<string>
#include<algorithm>
using namespace std;
int a[105][105]={},i,j,s;
int ch(int n){
int s=0;
while(n>=1){
s++;
n=n/10;
}
return s;
}
int sh(int s){
if(s==0){
return 0;
}
else{
return ch(s)+sh(s/2);
}
}
int main(){
cin>>s;
cout<<sh(s);
}
制作不易,记得一键三连哦!