原题链接:N的-2进制表示
解题思路:
注意事项:
参考代码:
#include <cstdio> #include <vector> #include <algorithm> #include <cstring> #include <cmath> #include <string> #include <map> #include <queue> #include <set> using namespace std; #ifdef WIN typedef __int64 LL; #define iform "%I64d" #define oform "%I64d\n" #else typedef long long LL; #define iform "%lld" #define oform "%lld\n" #endif #define SI(a) scanf("%d", &(a)) #define SDI(a, b) scanf("%d%d", &(a), &(b)) #define S64I(a) scanf(iform, &(a)) #define SS(a) scanf("%s", (a)) #define SDS(a, b) scanf("%s%s", (a), (b)) #define SC(a) scanf("%c", &(a)) #define PI(a) printf("%d\n", (a)) #define PS(a) puts(a) #define P64I(a) printf(oform, (a)) #define Max(a, b) ((a) > (b) ? (a) : (b)) #define Min(a, b) ((a) < (b) ? (a) : (b)) #define MSET(a, b) (memset((a), (b), sizeof(a))) #define Mid(L, R) ((L) + ((R) - (L))/2) #define Abs(a) ((a) >= 0 ? (a) : -(a)) #define REP(i, n) for(int (i)=0; (i) < (n); (i)++) #define FOR(i, a, n) for(int (i)=(a); (i) <= (n); (i)++) const int INF = 0x3f3f3f3f; const double eps = 10e-9; int ans[100]; int cnt; int main() { int x; SI(x); cnt = 0; while(x) { if(x % -2 == -1) { //余数为负数只能为-1 +2变成正数 ans[cnt++] = 1; x = x / -2 + 1; } else { ans[cnt++] = x % -2; x /= -2; } } if(cnt) { for(int i=cnt-1; i>=0; i--) { printf("%d", ans[i]); } putchar('\n'); } else { puts("0"); } return 0; }
0.0分
0 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复