Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1517394
  • 博文数量: 399
  • 博客积分: 8508
  • 博客等级: 中将
  • 技术积分: 5302
  • 用 户 组: 普通用户
  • 注册时间: 2009-10-14 09:28
个人简介

能力强的人善于解决问题,有智慧的人善于绕过问题。 区别很微妙,小心谨慎做后者。

文章分类

全部博文(399)

文章存档

2018年(3)

2017年(1)

2016年(1)

2015年(69)

2013年(14)

2012年(17)

2011年(12)

2010年(189)

2009年(93)

分类: LINUX

2009-11-23 16:17:11

有一种数制的基数是3,权值可以取-101,并分别用负号-,01表示,如这种数值的101表示十进制的10,既1×320×311×3010,又如这种进制的-0表示十进制的-3,既-1×310×30=-3。编程要求把给定的有符号整数转换为新进制数,该数的前面不能有多于的0,如10的新数制表示是101,这不要输出成0101

输入输出样例:

Simple input

Output for the input

1

2

1

2

3

10

3

12345

12345

0

 

1

1-

-

-1

-0

101

-0

1-0-0-11-0

-10101--10

 

 

解:

分析题目可得-2,-1012的新进制数分别为-1,-,011-。根据规律很容易写出代码。



#include
#include
#include
char buf[128];
int len;
void
main(){
 int a;
 while(1){
  scanf("%d",&a);
  if(a==0) break;
  len=0;
  while(a!=0){
   if(a>0)
    switch(a%3){
     case 0: buf[len++]='0'; a=a/3; break;
     case 1: buf[len++]='1'; a=(a-1)/3; break;
     case 2: buf[len++]='-'; a=(a+1)/3; break;    
    }
   else
    switch(-a%3){
     case 0: buf[len++]='0'; a=a/3; break;
     case 1: buf[len++]='-'; a=(a+1)/3; break;
     case 2: buf[len++]='1'; a=(a-1)/3; break;
   }
  }
  while(--len>=0) putchar(buf[len]);
  puts("\0");
 }
}
阅读(1999) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~