快快编程第218题:
218. 求位数
对于一个非负整数n,请问n包含几个数码?
输入输出格式
输入格式
输入一个非负整数n, 0<=n<=10^18。
输出格式
一个正整数。
两种算法,第一种:把n看成一个字符串;第二种:硬碰硬
第一种:
#include <bits/stdc++.h>
using namespace std;
int main()
{
string n;
getline(cin,n);
cout<<n.size();
return 0;
}
第二种:
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
ll size(ll x){
ll ans=0;
do{
ans++;
x/=10;
}while(x);
return ans;
}
int main()
{
ll n;
cin>>n;
cout<<size(n)<<endl;
return 0;
}
难度放大:如果是求n的二进制的位数呢?
哈哈哈,只有一种算法了
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
ll size(ll x){
ll ans=0;
do{
ans++;
x/=2;
}while(x);
return ans;
}
int main()
{
ll n;
cin>>n;
cout<<size(n)<<endl;
return 0;
}
还没玩够,那如果数多少个0呢?
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
ll ans(ll x){
ll cnt=0;
do{
if(x%10==0) cnt++;
x/=10;
}while(x);
return cnt;
}
int main()
{
ll n;
cin>>n;
cout<<ans(n)<<endl;
return 0;
}