1298 数制转换

TAG  数制转换

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

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

数字 普通3进制 题目的3进制
0 000 000
1 001 000
2 002 01-
3 010 010
4 011 011
5 012 1--
6 020 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; }

 

你可能感兴趣的:(html,c,System,output)