計算兩個IP之間的所有IP的演算法

2021-04-20 19:58:32 字數 1638 閱讀 2512

乙個演算法:有兩個未知的ip,例如:ip1:10.80.1.1和ip2:10.30.1.1,怎麼能計算機出他們之間所有的ip,然後用sql語句插入資料庫,非常感謝! 

在qq群裡面看到有人發這個請求。正好有點閒暇,google了一下,沒找到相關的演算法sample, 就花了點時間想了個簡單的演算法,一執行,測試了很多例子都可以,

程式已經放到資源上去了

那麼今天有點時間,就把思路和演算法貼出來,這個演算法是可以優化的,不過我測試過在 酷睿2雙核環境下,計算1.0.0.1- 10.10.10.10也不過是0.x秒的事,就暫時不做改進了

首先定義乙個ipv4類(ipv6的原理差不多),主要實現乙個方法compare,就是根據傳入的引數對ip進行比較,詳細看**

public

class ip

/// 

/// 和m做比較,例如 t.compare(m,3)那麼就是比較 a,b,c這三位

/// 

/// m,要比較的ip

/// i,要比較的位數,從a->d

/// -1表示比m小,0表示相等,1表示大

public

int compare(ip m, int i)}

下面是初始化

private ip t = new ip();

private ip b = new ip();

//textbox11-14是 較小的那個ip位址  textbox21-24是較大的那個ip位址

//當然也可以取得值之後 通過 t.compare(m,4)得到的返回值後來判斷大小

//這裡就可以認定t <= m

t.a = int.parse(textbox11.text);

t.b = int.parse(textbox12.text);

t.c = int.parse(textbox13.text);

t.d = int.parse(textbox14.text);

m.a = int.parse(textbox21.text);

m.b = int.parse(textbox22.text);

m.c = int.parse(textbox23.text);

m.d = int.parse(textbox24.text);

private

bool b = false;   //判斷是否跳出迴圈的bool變數

核心演算法

private

void alg()

}break;

}//不相等

for (int i= t.d;i<=255;i++)

t.d = 1;

if(t.c < 255)

t.c++;

else

}if(t.b < 255)

t.b++;

else

}        

if(t.a < m.a)

t.a++;

else

break;

}textboxresult.text = s.tostring();   //輸出結果

}

這個演算法複雜度是o(n4),效率一般。這裡丟擲磚頭,看看能否引出玉石來

mysql計算兩個日期範圍之間的所有日期

如果有許可權對資料庫進行修改操作可以使用以下方法生成日期 create table num i int insert into num i values 0 1 2 3 4 5 6 7 8 9 select adddate 2018 01 01 numlist.id as date from sel...

比較兩個IP位址大小

define crt secure no warnings 避免不安全錯誤 include include include include include int main int argc,char argv data函式 比較程式 define crt secure no warnings in...

計算兩個年份之間的月份

僅為測試,根據實際情況.public class test calendar startcalendar calendar.getinstance startcalendar.settime start calendar endcalendar calendar.getinstance endcal...