题目限制
时间限制 | 内存限制 | 评测方式 | 题目来源 |
1000ms | 131072KiB | 标准比较器 | Local |
题目背景
太原成成中学第3次模拟赛 第2道
题目描述
对于十进制整数N,试求其-2进制表示。
例如,因为 11 + 1-2 + 14 + 0-8 +116 + 1-32 = -13 ,所以(-13)10 = (110111)-2。
输入格式
一个整数,代表要转换的十进制数。
输出格式
一个整数,代表N的-2进制表示。
提示
|N| <= 2000000000
Vivian Snow
广东汕头聿怀初级中学NOIp第一次训练用题
样例数据
输入样例 #1 | 输出样例 #1 |
---|---|
-13 | 110111 |
从低位开始,用n除以该位的进制数,看结果是否为奇数,注意要开longlong
大牛的代码:
#include<cmath>
#include<cstdio>
#include<vector>
#include<cstring>
#include<iostream>
#include<algorithm>
#define inf 1000000000
#define ll long long
using namespace std;
ll n;
int p,ans[35];
int main()
{
scanf("%lld",&n);
for(ll i=1;p<=32;i*=(-2),p++)
if((n/i)&1)
{
ans[p]=1;
n-=i;
}
while(!ans[p]&&p!=0)p--;
for(int i=p;i>=0;i--)
printf("%d",ans[i]);
return 0;
}