思路:见代码注释。 #include <iostream> #include <cmath> using namespace std; int nPersons, suriverNum; int funcInput(); void funcWorkout(); void funcOutput(); int main() { while(funcInput()) { funcWorkout(); funcOutput(); } return 0; } int funcInput() { char str[5]; int n; scanf("%s", str); if(!strcmp(str,"00e0")) { return 0; } else { nPersons = (str[0] - '0') * 10 + (str[1] - '0'); n = str[3] - '0'; nPersons *= pow(10, double(n)); return 1; } } void funcWorkout() { int i; char numBinary[40]; int len = 0; /*将人数转换成二进制*/ while(nPersons) { numBinary[len] = nPersons % 2; nPersons >>= 1; len ++; } /*去掉前导0*/ for(i = len - 1; i >= 0; i --) { if(numBinary[i] == 0) { len --; } else { break; } } /*循环左移1位,并转换成十进制即结果*/ suriverNum = 0; for(i = len - 2; i >= 0; i --) { suriverNum = suriverNum * 2 + numBinary[i]; } suriverNum = suriverNum * 2 + numBinary[len - 1]; } void funcOutput() { printf("%d/n", suriverNum); }