与底为整数稍有不同,就是当被除数小于0的时候,不能用自带的取模,因为要保证余数要大过0,这样只需要把除数加大。 #include <iostream> #include <cmath> #include <string> using namespace std; //#define TEST int main() { #ifdef TEST freopen("input.txt", "r", stdin); #endif int n; int res; int t; int tmp; cin >> t; for(int i = 1; i <= t; i++) { cout << "Case #" << i << ": "; cin >> n; string s = ""; while(n != 0) { if(n * (-2) < 0) { s = (char)(n % -2 + '0') + s; n /= -2; }else { if(n % -2 == 0) { s = '0' + s; n /= -2; }else { s = '1' + s; n = n / -2 + 1; } } } if(s.length() == 0) cout << "0" << endl; else cout << s << endl; } //cout << -4 / -2 << endl; //2 //cout << -4 % -2 << endl; //0 //cout << -3 / -2 << endl; //1 //cout << -3 % -2 << endl; //-1 return 0; }