小傻题——笨蛋的看题日记:)——>3

E. 八进制小数

单点时限: 2.0 sec

内存限制: 256 MB

写一个程序将 0 与 1 (不包括 0 和 1)之间的八进制数转化为等价的十进制数。

例如,八进制数 0.75 就是十进制数 0.953125(7×8−1+5×8−2)。

小数点右边有 n 位的所有八进制数都可以转化为小数点右边至多有 3×n 位的十进制数。

输入格式

第 1 行:一个整数 T (1≤T≤10) 为问题数。

接下来有 T 行,对应每个问题有 1 行,每行有一个八进制,该八进制数的形式为 0.d1d2d3d4…dk,其中 di(1≤i≤k)是八进制数码(0~7),k<50。

输出格式

对于每个问题,输出一行问题的编号(0 开始编号,格式:case #0: 等)。

然后对应每个问题在一行中输出转化后的等价十进制数。注意尾部不要输出多余的 0

样例

input

3
0.75
0.0001
0.01234567

output

case #0:
0.953125
case #1:
0.000244140625
case #2:
0.020408093929290771484375

本题难度主要在于如何输出不同位数的十进制小数

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

const int N=1005;


int main()
{
    char str[N];
    char dest[N];
    int T;
    scanf("%d",&T);
    for(int m = 0; m < T; m++){
        int i,j,k,tmp;
        scanf("%s",str);
        k=0;
        memset(dest,0,sizeof(dest));
        int len=strlen(str);
        for(i=len-1;i>1;i--){
            int num=str[i]-'0';
            for(j=0;j<k || num!=0;j++){
                tmp=10*num+(j<k?dest[j]-'0':0);
                dest[j]=tmp/8+'0';
                num=tmp%8;
            }
            k=j;
        }
        printf("case #%d:\n0.%s\n", m,dest);
    }
    return 0;
}

1004. 内存显示——简单题

单点时限: 2.0 sec

内存限制: 256 MB

一个 int 类型变量或 double 类型变量在连续几个字节的内存中存放。读取数值时,当数值中包含小数点时类型为 double,否则类型为 int。将读入的数值存放在 int 类型变量或 double 类型变量中。以十六进制格式(a-f 字母采用小写形式)输出相应变量的连续的每个字节的值。

读入的数据保证能在一个 int 类型或 double 类型变量中正确存放。

注意:int 类型变量和 double 类型变量所占字节数以及一个变量的几个字节的存放顺序与所用计算机的体系结构和编译系统有关。

输入格式

每一行包含一个数值

输出格式

每行对应一个数据,每个字节后面都要输出一个空格

样例

input

1
-1
0
3.14
0.0
-1.0

output

01 00 00 00
ff ff ff ff
00 00 00 00
1f 85 eb 51 b8 1e 09 40
00 00 00 00 00 00 00 00
00 00 00 00 00 00 f0 bf
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
void solveint(int n);
void solvedouble(double d);

int main() {
    char s[31];
    s[30] =  '\0' ;
    while (scanf("%s", s) != EOF)
    {
        if (strchr(s, '.') == 0)
            solveint(atoi(s));
        else
            solvedouble(atof(s));
    }
    return 0;
}
void solveint(int n) {
    int c = sizeof(n);
    unsigned char* p = (unsigned char*)&n;
    while (c--)
        printf("%02x ", *p++);
    printf("\n");
}
void solvedouble(double d) {
    int c = sizeof(d);
    unsigned char* p = (unsigned char*)&d;
    while (c--)
        printf("%02x ", *p++);
    printf("\n");
}

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值