作者共发了7篇帖子。 内容转换:不转换▼
 
点击 回复
262 6
十六进制 -> 八进制
一派护法 十九级
1楼 发表于:2016-3-2 22:54
#include <stdio.h>
#include <stdlib.h>

void main()
{
    int n, i, j;
    char str[11];
    int *arr;
    scanf_s("%d", &n);
    arr = (int *)calloc(n, sizeof(int));
    for (i = 0; i < n; i++)
        scanf_s("%x", arr + i);

    str[10] = '\0'; // 确保字符串能结束
    for (i = 0; i < n; i++)
    {
        for (j = 9; j >= 0 && arr[i] != 0; j--)
        {
            str[j] = '0' + (arr[i] & 07); // 显示低三位的八进制值
            arr[i] >>= 3; // 右移三位
        }
        puts(str + j + 1); // 输出字符串(循环跳出时,j已经减1)

        //printf("%o\n", );
    }
    free(arr);
    system("pause");
}
一派护法 十九级
2楼 发表于:2016-3-2 22:55
蓝桥网又进不去了
一派护法 十九级
4楼 发表于:2016-3-2 22:57
【支持0】
#include <stdio.h>
#include <stdlib.h>

void main()
{
    int n, i, j;
    char str[11];
    int *arr;
    scanf_s("%d", &n);
    arr = (int *)calloc(n, sizeof(int));
    for (i = 0; i < n; i++)
        scanf_s("%x", arr + i);

    str[10] = '\0'; // 确保字符串能结束
    for (i = 0; i < n; i++)
    {
        if (arr[i] == 0)
        {
            puts("0");
            continue;
        }
        for (j = 9; j >= 0 && arr[i] != 0; j--)
        {
            str[j] = '0' + (arr[i] & 07); // 显示低三位的八进制值
            arr[i] >>= 3; // 右移三位
        }
        puts(str + j + 1); // 输出字符串(循环跳出时,j已经减1)
    }
    free(arr);
    system("pause");
}
一派护法 十九级
5楼 发表于:2016-3-3 16:21
#include <stdio.h>
#include <stdlib.h>

int main()
{
    int n, i, j;
    char buffer[20];
    char str[11];
    char *pBuf;
    int *arr;
    scanf("%d", &n);
    arr = (int *)calloc(n, sizeof(int));
    for (i = 0; i < n; i++)
    {
        scanf("\n%s", buffer);
        arr[i] = 0;
        for (pBuf = buffer; *pBuf != '\0'; pBuf++)
        {
            arr[i] <<= 4;
            if (*pBuf >= 'A' && *pBuf <= 'F')
                arr[i] += 0x0a + *pBuf - 'A';
            else if (*pBuf >= 'a' && *pBuf <= 'f')
                arr[i] += 0x0a + *pBuf - 'a';
            else
                arr[i] += *pBuf - '0';
        }
    }

    str[10] = '\0';
    for (i = 0; i < n; i++)
    {
        if (arr[i] == 0)
        {
            puts("0");
            continue;
        }
        for (j = 9; j >= 0 && arr[i] != 0; j--)
        {
            str[j] = '0' + (arr[i] & 07);
            arr[i] >>= 3;
        }
        puts(str + j + 1);
    }
    free(arr);
    return 0;
}

这个提交上去也是错误的。。。
一派护法 十九级
6楼 发表于:2016-3-3 17:04
网上的正确代码
#include<cstdio>
#include<cstring>
int getnu(char c){
    if(c>='0' && c<='9')return c-'0';
    return c-'A'+10;
}
void putans(char *s){
    int ans=0;
    for(int i=0;i<3;i++)
        ans=ans*16+getnu(s[i]);
    printf("%04o",ans);
}
int main()
{
    int n;
    char a[100010];
    scanf("%d",&n);
    for(int i=0;i<n;i++){
        scanf("%s",a);
        int len=strlen(a);
        int flen=(len-1)%3+1;
        int ans=0;
        for(int i=0;i<flen;i++)
            ans=ans*16+getnu(a[i]);
        printf("%o",ans);
        for(int j=flen;j<len;j+=3)putans(a+j);
        printf("\n");
    }
    return 0;
}
一派护法 十九级
7楼 发表于:2016-3-3 17:04
【我的运行错误。。。。】
#include <stdio.h>
#include <stdlib.h>

int main()
{
    int n, i;
    int *arr;
    char buffer[20];
    char *pBuf;
    scanf("%d", &n);
    arr = (int *)malloc(n * sizeof(int));
    for (i = 0; i < n; i++)
    {
        scanf("\n%s", buffer);
        arr[i] = 0;
        for (pBuf = buffer; *pBuf != '\0'; pBuf++)
        {
            arr[i] <<= 4;
            if (*pBuf >= 'A' && *pBuf <= 'F')
                arr[i] += *pBuf - 'A' + 0x0a;
            else
                arr[i] += *pBuf - '0';
        }
    }
    for (i = 0; i < n; i++)
    {
        if (arr[i] == 0)
        {
            puts("0");
            continue;
        }
        buffer[19] = '\0';
        for (pBuf = buffer + 18; arr[i] > 0; pBuf--)
        {
            *pBuf = '0' + (arr[i] & 7);
            arr[i] >>= 3;
        }
        puts(pBuf + 1);
    }
    free(arr);
    return 0;
}
一派护法 十九级
8楼 发表于:2016-3-3 18:19
【运行错误】
#include <stdio.h>
#include <stdlib.h>

int main()
{
    int n, i;
    unsigned long long *arr;
    char buffer[20];
    char *pBuf;
    scanf("%d", &n);
    arr = (unsigned long long *)malloc(n * sizeof(unsigned long long));
    for (i = 0; i < n; i++)
    {
        scanf("\n%s", buffer);
        arr[i] = 0;
        for (pBuf = buffer; *pBuf != '\0'; pBuf++)
        {
            arr[i] <<= 4;
            if (*pBuf >= 'A' && *pBuf <= 'F')
                arr[i] += *pBuf - 'A' + 0x0a;
            else
                arr[i] += *pBuf - '0';
        }
    }
    for (i = 0; i < n; i++)
    {
        if (arr[i] == 0)
        {
            puts("0");
            continue;
        }
        buffer[19] = '\0';
        for (pBuf = buffer + 18; arr[i] > 0; pBuf--)
        {
            *pBuf = '0' + (arr[i] & 7);
            arr[i] >>= 3;
        }
        puts(pBuf + 1);
    }
    free(arr);
    return 0;
}

回复帖子

内容:
用户名: 您目前是匿名发表
验证码:
(快捷键:Ctrl+Enter)
 

本帖信息

点击数:262 回复数:6
评论数: ?
作者:巨大八爪鱼
最后回复:巨大八爪鱼
最后回复时间:2016-3-3 18:19
 
©2010-2024 Arslanbar Ver2.0
除非另有声明,本站采用知识共享署名-相同方式共享 3.0 Unported许可协议进行许可。