首页 > 其他 > 详细

TYVJ P1022 进制转换

时间:2016-08-21 18:19:04      阅读:177      评论:0      收藏:0      [点我收藏+]

背景

太原成成中学第3次模拟赛 第2道

描述

对于十进制整数N,试求其-2进制表示。
例如,因为 1*1 + 1*-2 + 1*4 + 0*-8 +1*16 + 1*-32 = -13 ,所以(-13)_10 = (110111)_-2。

输入格式

一个整数,代表要转换的十进制数。

输出格式

一个整数,代表N的-2进制表示。

测试样例1

输入

-13

输出

110111

备注

|N| <= 2000000000
Vivian Snow
广东汕头聿怀初级中学NOIp第一次训练用题

代码

 1 #include<iostream>
 2 #include<cstdio>
 3 #include<cstring>
 4 #include<algorithm>
 5 using namespace std;
 6 long long n;
 7 int p,ans[35];
 8 int main(){
 9     scanf("%lld",&n);
10     for(long long i=1;p<=32;i*=-2,p++){
11         if((n/i)&1){
12             ans[p]=1;
13             n-=i;
14         }
15     }
16     while(!ans[p]&&p!=0) p--;
17     for(int i=p;i>=0;i--){
18         printf("%d",ans[i]);
19     }
20     puts("");
21     return 0;
22 }

思路:和平常进制转换一样。但是:

如果用普通的%或者mod结果不对,为什么?因为它不是往下取第一个能被-2整除的数,而是把此数对2取模,然后依前者符号决定。所以,要手工用“往下取第一个能被-2整除的数”作为求余数的方法。

 

从低位开始,用n除以该位的进制数,看结果是否为奇数,注意要开longlong

TYVJ P1022 进制转换

原文:http://www.cnblogs.com/radiumlrb/p/5792999.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!