d635 - 幸運777?luck
題目描述
題目要求將十進位數字轉換為八進位數字,直到輸入小於 0 的數字為止。
解題思路
程式碼使用 radixConversion 函數將十進位數字轉換為八進位。轉換的邏輯是反覆計算當前位數的值,並將其從原始數字中減去。如果計算出的值小於 10,則直接輸出該值;否則,將其轉換為相應的字母(A 表示 10,B 表示 11,依此類推)。
複雜度分析
- 時間複雜度: O(log8(n)),其中 n 是輸入數字。因為需要迭代的次數與數字的八進位表示的位數成正比,而八進位表示的位數與 log8(n) 成正比。
- 空間複雜度: O(1),因為程式碼使用的額外空間是固定的,不隨輸入數字的大小而變化。
程式碼
#include <stdio.h>
#include <math.h>
void radixConversion(int number, int radix);
int main()
{
int number, radix;
while (scanf("%d", &number) != -1)
{
radixConversion(number, 8);
}
return 0;
}
/* PRESET CODE END - NEVER TOUCH CODE ABOVE*/
void radixConversion(int number, int radix){
int a=0;//位數
int v=0;//每次榆樹
int x=radix;//radix的方方
if(number>0){
a=log(number)/log(radix)+1;//換底,我上網查長這樣//a=11;
for(int i=0;i<a;i++){
x=pow(radix,a-i-1);
v=number/x;
number=number-(v*x);
if(v<10){
printf("%d",v);
}
else{
v-=10;
printf("%c",'A'+v);
}
}
printf("\n");
}
else if(number==0){
printf("%d\n",0);
}
else{
printf("%d\n",-1);
}
}