skew数

在skew binary表示中,  第k 位的值xk表示xk(2
k+1
-1)。  每个位上的可能数字是0 或
1,最后面一个非零位可以是2, 例如, 10120(skew) = 1(2
5
-1) + 0(2
4
-1) + 1(2
3
-1) + 2(2
2
-1)
+ 0(2
1
-1) = 31 + 0 + 7 + 6 + 0 = 44. 前十个skew数是0、1、2、10、11、12、20、100、101、
以及102。
输入数据
输入包含一行或多行,每行包含一个整数n。 如果 n = 0 表示输入结束,否则n是一
个skew 数
输出要求
对于每一个输入,输出它的十进制表示。转换成十进制后,n 不超过2
31
-1 =
2147483647
输入样例
10120
200000000000000000000000000000
10
1000000000000000000000000000000
11
100
11111000001110000101101102000
0
输出样例
44
2147483646
3
2147483647
4
7
1041110737

 

# include <stdio.h>
# include <string.h>

int myPow(int a,int j){
 int i = a;
 while(--j){
  a *= i;
 }
 return a;
}
int skewToAlgorism(char *x)
{
  int i,j,len = strlen(x);
  int al = 0;
  int kResult = 0;
  if(strcmp(x,"0") == 0)
   return -1;
  j = len;
  for(i = 0;i < len;i++){
   kResult = (x[i]-'0')*(myPow(2,j)-1);
   al += kResult;
   j--;
  }
  return al;
}
int main()
{
 char skew[32];
 int algorism;
 while(1){
  scanf("%s",skew);
  algorism = skewToAlgorism(skew);
  if(algorism == -1){
   break;
  }
  printf("%d\n",algorism);
 }
 return 0;
}

/*

此题也是进制的转换问题,但此题转换的规则与一般的进制转换不同,虽然如此,知道规则也是很容易做出来的

分析有一下难点:

1、数字输入的存储类型

2、2的不同次方的计算,注意:本程序未调用头文件里的自带函数

*/

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值