负二进制转换

            Time Limit : 3000/1000ms (Java/Other)   Memory Limit : 65535/32768K (Java/Other)

 

Problem Description

QAQ学长对于现在大家普遍学习的C语言、Java语言等等很是不屑,他认为二进制指令才是最优美的语言;苦苦思考哲学的QAQ学长
已经不满足正二进制了,他现在研究的是负二进制,他给你一串负二进制表示的编码,希望你告诉他这串负二进制表示的十进制数是
多少。

Input

Output

Sample Input

1011
001101001

Sample Output

-3
220


Hint:
对于第一组样例
ans = 1*(-2)^0 + 0*(-2)^1 + 1*(-2)^2 + 1*(-2)^3 = -3

水题,直接签到。
 1 #include <bits/stdc++.h>
 2 
 3 using namespace std;
 4 
 5 int b[31];
 6 char s[31];
 7 
 8 int main(){
 9 
10     b[0] = 1;
11     for (int i = 1; i <= 22; ++i) b[i] = b[i - 1] * (-2);
12 
13     while (~scanf("%s", s)){
14         int ans = 0;
15         for (int i = 0; i < strlen(s); ++i)
16             ans += ((int)s[i] - 48) * b[i];
17 
18         printf("%d\n", ans);
19     }
20 
21 
22 
23     return 0;
24 
25 }
View Code

 

 

相关文章: