# Base Conversion# Math# Number System

d635 - 幸運777?luck

🔗 前往 ZeroJudge 原題

題目描述

題目要求將十進位數字轉換為八進位數字,直到輸入小於 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);
	}
      
}

Discussion