Run ID | 作者 | 问题 | 语言 | 测评结果 | Time | Memory | 代码长度 | 提交时间 |
---|---|---|---|---|---|---|---|---|
110554 | 彭林江 | 二进制小数转十进制 | C++ | Accepted | 1 MS | 284 KB | 772 | 2025-02-22 11:59:01 |
#include<bits/stdc++.h> using namespace std; string s; int xsd = -1; int a[64]; int main() { cin >> s; int n = s.size(); for(int i = 0; i < n; i++) { if(s[i] == '.') { xsd = i; break; } } int j = 0; if(xsd == -1) { // 说明数字里根本没有小数 for(int i = n-1; i >= 0; i--) { a[j] = s[i] - 48; j++; } int ans = 0; for(int i = 0; i < n; i++){ ans += pow(2,i) * a[i]; } cout << ans; } else { for(int i = xsd-1; i >= 0; i--) { a[j] = s[i] - 48; j++; } double ans = 0; for(int i = 0; i < xsd; i++){ ans += pow(2,i)*a[i]; } // 上面算完了整数部分 for(int i = xsd+1; i < n; i++){ ans += pow(2,-(i-xsd))*(s[i] - 48); } cout << ans; } return 0; }