PTA 7-1 5003 skew数

文章目录

题目:

输入格式:

输出格式:

输入样例:

输出样例:

解题代码:

pow函数简介:


题目:

在skew 二进制数表示中,第k位的值xk 表示xk * (2k+1-1) 。每个位上的可能数字是0或1,最后面一个非零位可以是2,例如, 10120(skew) = 1 * (25-1) + 0 * (24-1) + 1 * (23-1) + 2 * (22-1) +0 * (21-1) = 31 + 0 + 7 + 6 + 0 = 44. 前十个skew 数是 0、1、2、10、11、12、20、100、101以及102。

输入格式:

输入包含一行或多行,每行包含一个整数n。如果n = 0 表示输入结束,否则n 是一个skew 数。

输出格式:

对于每一个输入,输出它的十进制表示。转换成十进制后, n 不超过 231-1 = 2 147 483 647。

输入样例:

10120
200000000000000000000000000000
10
1000000000000000000000000000000
11
100
11111000001110000101101102000
0

输出样例:

44
2147483646
3
2147483647
4
7
1041110737

解题代码:

#include <stdio.h>
#include <string.h>
#include <math.h>
int main()
{
    char a[1000000]={};
    long sum=0;
    while(scanf("%s",a)!=EOF)
    {
        if(strlen(a)==1&&a[0]=='0') break;
        for(int i=0;i<strlen(a);i++)
            sum+=(a[i]-48)*(pow(2,strlen(a)-i)-1);
        printf("%ld\n",sum);
        a[1000000]={};
        sum=0;
    }
    return 0;
}

pow函数简介:

sum+=(a[i]-48)*(pow(2,strlen(a)-i)-1);

1.介绍:原型在TC2.0中原型为extern float pow(float x, float y);

              而在VC6.0中原型为double pow( double x, double y );

2.头文件:#include <math.h>

3.函数功能:计算x的y次幂

4.返回值:为double型,int,float会给与警告

注意:当x为负数且y为小数,或者x为0且y小于等于0,将出现结果错误

        如果函数参数与要求类型不匹配,可以进行强制类型转换来达到目的

猜你喜欢

转载自blog.csdn.net/weixin_63249578/article/details/128532947