|
十六进制 -> 八进制 |
一派护法 十九级 |
#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"); }
|
一派护法 十九级 |
蓝桥网又进不去了
|
一派护法 十九级 |
【支持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"); }
|
一派护法 十九级 |
#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; }
这个提交上去也是错误的。。。
|
一派护法 十九级 |
网上的正确代码 #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; }
|
一派护法 十九级 |
【我的运行错误。。。。】 #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; }
|
一派护法 十九级 |
【运行错误】 #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; }
|