給定n個十六進制正整數,輸出它們對應的八進制數。
輸入格式:
輸入的第一行爲一個正整數n (1<=n<=10)。
接下來n行,每行一個由0~9、大寫字母A~F組成的字符串,
表示要轉換的十六進制正整數,每個十六進制數長度不超過100000。
輸出格式:
輸出n行,每行爲輸入對應的八進制正整數。
注意
輸入的十六進制數不會有前導0,比如012A。
輸出的八進制數也不能有前導0。
題目鏈接:http://zhidao.baidu.com/question/624821357816224364.html
做而論道編程如下:2015-01-28 11:58
提問者採納
16 進制數字中的字母,應該都是大寫的。因此,就不要檢測小寫的符號。
輸入十六進制數無前導0、無後綴H;
輸出等效的 10 進制、8 進制數。
#include<iostream>
using namespace std;
void main()
{
int i, n;
char s1[10]; //輸入的16進制數
char s2[20]; //輸出的八進制數
cin >> s1; //輸入0~9, A~F, 不要輸入其它符號
n = 0;
i = 0;
while (s1[i]) {
n *= 16;
if ((s1[i] >= '0') && (s1[i] <= '9')) n += (s1[i] - 48);
if ((s1[i] >= 'A') && (s1[i] <= 'F')) n += (s1[i] - 55);
//無視其它符號
i++;
}
cout << "_10_ = " << n;
cout << endl << "__8_ = ";
s2[0] = n % 8 + 48;
n /= 8;
i = 1;
while (n) {
s2[i] = n % 8 + 48;
n /= 8;
i++;
}
while (i) {
cout << s2[i - 1];
i--;
}
cout << endl;
system("pause");
}
提問者評論:2015-1-31 19:45
棒棒嗒 能加好友嘛
做而論道2015-1-29 12:23
3ABC = ((3 * 16 + A) * 16 + B) * 16 + C。