https://vjudge.net/contest/150494#problem/D 链接
这道题一看到就直接上手做wa了几次后才知道自己不会,只好寻求网上大佬的帮助,网上大致有两种处理办法但我看的还是迷迷糊糊的,害怕自己忘记处理方法就写个博客来提醒自己哈。
第一种呢就是用绝对值方法,0要特殊处理啊。
#include <iostream>
#include<stdio.h>
#include<string.h>
#include<math.h>
#include<algorithm>
using namespace std;
int a[100000];
int main()
{
long long n;
int cnt=0;
scanf("%I64d",&n);
while(n)
{
a[++cnt]=abs(n%(-2));
n-=abs(n%(-2));
n/=-2;
}
for(int i=cnt;i>=1;i--)
{
printf("%d",a[i]);
}
if(cnt==0) printf("0");
printf("\n");
return 0;
}
第二种方法至今还有点迷,就是不停的调整。但我也不知道为什么这么做就先记下来好了
直接上代码好了。就当是模板背过算了
#include "iostream"
#include "cstring"
#include "cstdlib"
#include "cstdio"
#define N 100000
using namespace std;
int n;
int sk[N],tp;
int main(){
scanf("%d",&n);
while(n){
int k=n%-2;
int t=n/-2;
if (k<0){
k+=2;
t++;
}
n=t;
sk[++tp]=k;
}
for (int i=tp;i>=1;i--)
printf("%d",sk[i]);
if (tp==0) printf("0");
puts("");
return 0;
}