您的位置:首页 > Web前端 > HTML

1298 数制转换

2010-07-17 23:31 176 查看
TAG  数制转换

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

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

数字普通3进制题目的3进制
0000000
1001000
200201-
3010010
4011011
50121--
60201-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;
}


 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  output system html c