7 条题解
-
6
今天我们又又又来做题啦!看看思路吧~
- 首先因为用 long long 型不能成功,因为数字太大了,所以可以用 string 字符串型来储存 s
- 定义一个函数是 two_ten 然后遍历字符串 s 如果这个数字是 1 的话,就把 2 的 len - i 次方(len 是 s 的总长度 - 1)加到总数(也就是十进制)n
- 最后输出就可以啦~
上代码吧~(UP 主 AC过哦~)
#include <bits/stdc++.h> using namespace std; void two_ten(string s) { int len = s.length() - 1, n = 0; for(int i = 0; i <= len; i++) if(s[i] == '1') n += pow(2, len - i); cout << n; } int main() { string s; cin >> s; two_ten(s); return 0; }
-
6
#include<bits/stdc++.h> using namespace std; string s; int ans; int main(){ ios::sync_with_stdio(false); // 输入输出加速 cin.tie(0); cout.tie(0); cin>>s; short len=s.length(); // 降低时间复杂度 for(short i=0;i<len;i++){ ans=ans*2+(s[i]-'0'); // ans*2是因为2进制,s[i]-'0'是算出当前位上的数字 } cout<<ans<<"\n"; return 0; }
-
4
我就是不用函数!哎~ 就是玩!
来看看思路吧~
其实二进制与十进制在表示数字上并没有本质区别:十进制是逢10进1,二进制是逢二进一。
手动转化方法是: 举例:10110 转化为十进制就是1 * 2^4 + 0 * 2^3 + 1 * 2^2 + 1 * 2^1 + 0 * 2^0 = 24
代码(AC):
#include <bits/stdc++.h> using namespace std; int main() { int ans = 0; string s; cin >> s; int j = s.length(); for (int i = 0; i < s.length(); i++) { int sum = 1; for (int x = 1; x < j; x++) { sum *= 2; } ans += (s[i] - '0') * sum; j--; } cout << ans; return 0; }
- 1
信息
- ID
- 287
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 4
- 标签
- 递交数
- 493
- 已通过
- 239
- 上传者