C言語-文字列配列-16進数回転8進数(ブルーブリッジカップはn個の16進数の正の整数を与え、対応する8進数を出力する.)
12999 ワード
16進から8進へ
問題の説明
n個の16進数の正の整数を与え、対応する8進数を出力する.入力フォーマット入力の第1行目は正の整数n(1<=n<=10)である.次にn行目は、変換する16進数の正の整数を表す09、大文字AFからなる文字列であり、各16進数の長さは100000を超えない.出力フォーマットはn行を出力し、各行は対応する8進数の正の整数を入力する.
サンプル入力2 39 123 ABC
サンプル出力71 4435274
ヒント:このコードはブルーブリッジカップ16進数変換8進数の問題を解決するためではなく、文字列配列の入力を理解するためだけですが、ブルーブリッジカップの問題にヒントを与えることができます.その問題の入出力数値は大きすぎて、配列出力(途中で他の進数を変換するのはもちろん配列も使います)が使用できます.これにより、タイプの値範囲を考慮する必要はありません.本題の鍵は文字列の配列入力ですか.私はここで巧みに2次元配列を作りましたが、実質は最終的には同じです.
問題の説明
n個の16進数の正の整数を与え、対応する8進数を出力する.入力フォーマット入力の第1行目は正の整数n(1<=n<=10)である.次にn行目は、変換する16進数の正の整数を表す09、大文字AFからなる文字列であり、各16進数の長さは100000を超えない.出力フォーマットはn行を出力し、各行は対応する8進数の正の整数を入力する.
サンプル入力2 39 123 ABC
サンプル出力71 4435274
ヒント:このコードはブルーブリッジカップ16進数変換8進数の問題を解決するためではなく、文字列配列の入力を理解するためだけですが、ブルーブリッジカップの問題にヒントを与えることができます.その問題の入出力数値は大きすぎて、配列出力(途中で他の進数を変換するのはもちろん配列も使います)が使用できます.これにより、タイプの値範囲を考慮する必要はありません.本題の鍵は文字列の配列入力ですか.私はここで巧みに2次元配列を作りましたが、実質は最終的には同じです.
#include
#include
#pragma warning(disable:4996)
void scale(char* str)
{
int ten = 0, num = 0, n = 0;
while (str[++num] != '\0') {
;
}
int i = 0;
while (i <= num) {
if (str[i] >= '0' && str[i] <= '9')
{
n = (int)(str[i] - '0');
}
else if (str[i] >= 'a' && str[i] <= 'f')
{
n = (int)(str[i] - 'a' + 10);
}
else if (str[i] >= 'A' && str[i] <= 'F')
{
n = (int)(str[i] - 'A' + 10);
}
else
{
break;
}
ten += n * pow(16, (double)num - 1 - (double)i);
i++;
}
int eight = 0,m=0;
i = 0;
while (ten)
{
m = ten % 8;
ten /= 8;
eight += m * pow(10, i);
i++;
}
printf("%d", eight);
}
int main()
{
int num;
scanf("%d",&num);
char** arr;
arr = (char**)malloc(num * sizeof(char*));
for (int i = 0; i < num; i++)
{
*(arr + i) = (char*)malloc(sizeof(char) * 100);
}
for (int i = 0; i < num; i++)
{
scanf("%s", arr[i]);
}
for (int i = 0; i < num; i++)
{
scale(arr[i]);
}
free(arr);
return 0;
}