1298 数制转换

TAG 数制转换

原先是想不用普通进制转换,用其他方法做,发现很繁琐。

对比一下普通的进制转换与题目的进制转换

数字普通3进制 题目的3进制
0000 000
1001 000
2002 01-
3010 010
4011 011
5012 1--
6020 1-0

ps:csdn居然没有插入表格的功能,还得手写html代码,囧(‖▔ ω▔)

发现遇到2就变-,然后先前一位进一。如果n是负数,就把正数结果取反即可。即1和-互换

/* source code of submission 428002, Zhongshan University Online Judge System */ #include <stdio.h> char bit[25]; int len; int n; void tobase3(int n) { if ( n<0 ) { n=-n; } len=-1; while ( n>0) { bit[++len]=n%3+'0'; n/=3; } for (int i=len+1; i<25; ++i) { bit[i]='0'; } } void adjust() { for (int i=0; i<=len; ++i) { if ( bit[i]=='3' ) { bit[i]='0'; ++bit[i+1]; } else if ( bit[i]=='2' ) { bit[i]='-'; ++bit[i+1]; } } if ( bit[len+1]>'0' ) { ++len; } } void output() { if ( n>=0 ) { for (int i=len; i>=0; --i) { printf("%c", bit[i]); } } else { for (int i=len; i>=0; --i) { switch ( bit[i] ) { case '1': printf("-"); break; case '-': printf("1"); break; case '0': printf("0"); break; } } } printf("/n"); } int main(int argc, char *argv[]) { while ( scanf("%d", &n)!=EOF ) { if ( n==0 ) { printf("0/n"); continue; } tobase3(n); adjust(); output(); } return 0; }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值