我想問一下,為什么在devc++運行沒問題,但是一上傳到藍橋杯練習系統就顯示“錯誤”,謝謝 ^_^
#include<iostream>
#define N 11
#define M 100001
using namespace std;
int a[N];
int b[M];
int main()
{int n;
cin>>n;
for(int i=0;i<n;i++)
cin>>hex>>b[i];
for(int i=0;i<n;i++)
{a[i]=b[i];
cout<<oct<<a[i]<<endl;}
return 0;
}
uj5u.com熱心網友回復:
能提供一點像資料范圍,結果處理要求,樣例輸入輸出什么的嗎?這么直接掛著有沒有任何資訊,我們都不知道你的問題在哪uj5u.com熱心網友回復:
資源限制
時間限制:1.0s 記憶體限制:512.0MB
問題描述
給定n個十六進制正整數,輸出它們對應的八進制數。
輸入格式
輸入的第一行為一個正整數n (1<=n<=10)。
接下來n行,每行一個由0~9、大寫字母A~F組成的字串,表示要轉換的十六進制正整數,每個十六進制數長度不超過100000。
輸出格式
輸出n行,每行為輸入對應的八進制正整數。
【注意】
輸入的十六進制數不會有前導0,比如012A。
輸出的八進制數也不能有前導0。
樣例輸入
2
39
123ABC
樣例輸出
71
4435274
【提示】
先將十六進制數轉換成某進制數,再由某進制數轉換成八進制。
不好意思
uj5u.com熱心網友回復:
每個十六進制數長度不會超過1000000怎么理解,是數值大小嗎uj5u.com熱心網友回復:
/**
* @file hex2oct.c
* @brief
*/
#include <assert.h>
#include <ctype.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define M 100000
static
char *
chop(char *s)
{
int n;
n = strlen(s);
if (n > 0 && ('\r' == s[n - 1] || '\n' == s[n - 1]))
s[--n] = '\0';
if (n > 0 && ('\r' == s[n - 1] || '\n' == s[n - 1]))
s[--n] = '\0';
return s;
}
static
void
hex2bin(char *hex, int len, char *bin)
{
int i;
int b0 = 1, b1 = 2, b2 = 4, b3 = 8;
for (i = 0; i < len; i++) {
bin[i * 4 + 0] = (b3 & hex[i]) ? 1 : 0;
bin[i * 4 + 1] = (b2 & hex[i]) ? 1 : 0;
bin[i * 4 + 2] = (b1 & hex[i]) ? 1 : 0;
bin[i * 4 + 3] = (b0 & hex[i]) ? 1 : 0;
}
}
static
void
bin2oct(char *bin, int len)
{
int i, n;
char *b;
for (i = 0; i < len - 1; i++) {
if (bin[i])
break;
}
b = bin + i;
n = len - i;
switch (n % 3) {
case 1:
b -= 2;
n += 2;
break;
case 2:
b -= 1;
n += 1;
break;
}
for (i = 0; i < n; i += 3) {
printf("%d", b[i + 0] * 4 + b[i + 1] * 2 + b[i + 2]);
}
printf("\n");
}
int
main(void)
{
int i, n;
int j, m;
char *s;
int c;
char *hex, *bin;
assert(1 == scanf("%d\n", &n));
s = malloc(M + 1);
for (i = 0; i < n; i++) {
fgets(s, M, stdin);
chop(s);
m = strlen(s);
hex = malloc(m);
bin = malloc(m * 4);
for (j = 0; j < m; j++) {
c = s[j];
if (isdigit(c)) {
c = c - '0';
} else if (isxdigit(c)) {
c = toupper(c) - 'A' + 10;
}
hex[j] = c;
}
hex2bin(hex, m, bin);
bin2oct(bin, m * 4);
free(hex);
free(bin);
}
free(s);
return 0;
}
/*
輸入:
18
0
1
2
3
4
5
6
7
8
9
A
B
C
D
E
F
0123456789ABCDEF
FEDCBA9876543210
輸出:
0
1
2
3
4
5
6
7
10
11
12
13
14
15
16
17
4432126361152746757
1773345651416625031020
*/
uj5u.com熱心網友回復:
3位十六進制對應4位八進制打表 + 對齊
完事
uj5u.com熱心網友回復:
十六進制如果用 整型存盤
2位就需要1個位元組的記憶體
100000位 需要記憶體是 50000位元組的記憶體
你的int 才4位元組 差遠了
uj5u.com熱心網友回復:
連保存輸入都做不到后面的轉換毫無意義
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/121085.html
標籤:C++ 語言
上一篇:qt編譯dooble出現如下問題,確認webengine已經安裝,求大佬指教
下一篇:nginx安裝和部署
