#include <iostream> #include <string> #include <cstdio> #include <algorithm> using namespace std; int main() { //初始情况下,并不确定输入的skew数的位数 //由上可知,在skew数位数不确定的情况下,根据所给公式: x[k] = x[k] * (2 ^ (k + 1) - 1) 可知,即使使用long long(2 ^ 63 - 1)亦无法全部表示skew数对应的十进制形式 //得出结论:处理超大整数要当作字符串来处理 string skew; //c++中string类型的相关内容及用法和函数 //用while循环来决定skew数的位数 while (cin >> skew) { // cin >> skew 按空格/换行分割输入 getline(cin, skew) 按换行分割输入 reverse(skew.begin(), skew.end());//反转字符串,使最低位对应索引 i=0。 int res = 0; for (int i = 0; i < skew.size(); i++) res += (skew[i] - '0') * ((2 << i) - 1);//2的次方相当于左移 cout << res << endl; } //输入多组数据,每组数据包含一个skew数 //怎么判断输入已经结束 } // 64 位输出请用 printf("%lld")