# Bit Manipulation# Arithmetic

c705 - Int32 to IPv4

🔗 前往 ZeroJudge 原題

題目描述

題目要求將一個 32 位元整數轉換為 IPv4 位址的格式 (a.b.c.d)。IPv4 位址由四個介於 0 到 255 之間的數字組成,每個數字代表一個位元組。

解題思路

解題思路是將 32 位元整數拆分成四個 8 位元的組件,分別對應 IPv4 位址的四個數字。這可以使用除法和取模運算來實現。

  1. 第一個數字 (a) 是整數除以 16777216 (2^24) 的商。
  2. 第二個數字 (b) 是將整數除以 16777216 後的餘數除以 65536 (2^16) 的商。
  3. 第三個數字 (c) 是將整數除以 65536 後的餘數除以 256 (2^8) 的商。
  4. 第四個數字 (d) 是將整數除以 256 後的餘數。

複雜度分析

  • 時間複雜度: O(1)
  • 空間複雜度: O(1)

程式碼

#include<stdio.h>
int main(){
	long long int x,a,b,c,d;
	while(scanf("%lld",&x)>0){
		a=x/16777216;
		x%=16777216;
		b=x/65536;
		x%=65536;
		c=x/256;
		d=x%256;
		printf("%lld.%lld.%lld.%lld\n",a,b,c,d);
	}
}

Discussion