题意:
将输入的十进制数转化为-2进制数
思路:
取余的函数定义 a%b = a - (a/b)*b,那么可以得到 取余-2余数当a为负数是为-1,0;a为正数时为1,0 由于不可取-1,所以将-1变为1,例如: 5%-2 = 5 - 2*-2=-1, 如果b+1的3的话,就变为5 - 3*-2 = 1 可知,如果将-1转为1商要加上1 截取一个博主的总结while(n) { a[++c]=n%(-m); //m就是m进制,-m就是负进制 n=n/(-m); if(a[c]<0) { a[c]=m+a[c]; n++; } }代码:#include<cstdio> #include<cmath> int a[110]; int main() { int n; int kase; scanf("%d", &kase); for(int t=1; t<=kase; t++) { scanf("%d", &n); printf("Case #%d: ", t); int flag = -1; a[0] = 0; while(n) { a[++flag] = n%(-2); n /= (-2); if(a[flag] == -1) { a[flag] = 1; n++; } } while(flag>0) printf("%d", a[flag--]); printf("%d", a[0]); printf("\n"); } return 0; }