當前位置:首頁 » 操作系統 » 整數演算法

整數演算法

發布時間: 2022-01-08 01:19:22

A. 硬碟分區的整數演算法

這是網上流傳的「硬碟分區整數最精確演算法」二種說法:

【第一種】硬碟整數分區計算方法我們一般是這樣算的:分區大小=(分區大小-1)×4+1024×分區大小。
比如: 40GB=(40-1)×4+1024×40=41116MB

按照這樣的計算方法:
5G=5136MB
10G=10276MB
15G=15416MB
20G=20556MB
30G=30836MB
40G=41116MB

【第二種】
30G以內,輸入上面的數據,如10G你輸入10276,在Windows資源管理器裡面顯示的剛好10.00GB,而在管理工具-磁碟管理界面顯示就是10.04GB,如果是40G你輸入41116,那麼在Windows資源管理器裡面顯示的剛好40.01GB。
因此上面的計算公式還不是很准確。 最精確硬碟分區的演算法我認為應該是這樣的:

硬碟一般有255磁頭,63扇區,故每柱面大小為:
512byte x 255 x 63=8225280bytes =7.84423828125 MB
如果要分40GB,那麼要40x1024MB=40960MB
需要柱面數為40960÷7.84423828125=5221.66
取整數既為5222個柱面
應分M數為5222x7.84423828125=40962.6123046875MB
不管小數點後面幾位都進1,也就是40963MB,windows就認為是40GB了。
這個方法NTFS和FAT32通用。

下面附1GB到200GB精確計算結果:
1G : 1028M
2G : 2056M
3G : 3075M
4G : 4103M
5G : 5123M
6G : 6150M
7G : 7170M
8G : 8198M
9G : 9217M
10G : 10245M
15G : 15367M
20G : 20482M
25G : 25604M
30G : 30726M
35G : 35841M
40G : 40963M
45G : 46085M
50G : 51208M
55G : 56322M
60G : 61444M
65G : 66567M
70G : 71681M
75G : 76803M
80G : 81926M
85G : 87048M
90G : 92162M
95G : 97285M
100G : 102407M
110G : 112644M
120G : 122888M
130G : 133125M
140G : 143362M
150G : 153606M
160G : 163843M
170G : 174088M
180G : 184324M
190G : 194561M
200G : 204806M

此精確分區結果,在管理工具-磁碟管理界面,和Windows資源管理器裡面顯示的是整數,10G就是10.00GB,20G就是20.00GB,40G就是40.00GB

B. 整數的計算方法是什麼

四則運算 計演算法則
整數加、減 把數位對齊,從低位加起。
小數加、減 把小數點對齊,再按照整數加、減法的法則進行運算。
分數加、減 當分母相同時,把分子直接相加減;分母不同時,要先通分,在相加減。
整數乘法 相同數位對齊,從乘法的末位算起,用乘法的每一位去乘被乘數,得數的末位和
乘數對齊。
整數除法 從被除數的最高位除起,除到被除數的哪一位,商就寫在那一位上面,每次除後余
下的數必須比余數小。
分數乘法 用分子相乘的積做分子,用分母相乘的積做分母。
分數除法 甲數除以乙數(0除外),等於甲數乘乙數的倒數。
小數乘法 小數乘整數,先按整數乘法法則算出積,再看被乘數有幾位小數,就從積的右邊起
數出幾位,點上小數點。
小數除法 除數是整數時,按照整數除法的法則計算,商的小數點要和被除數的小數點對齊;
除數是小數時,先移動除數的小數點,使它變成整數,除數的小數點向右移動幾
位,被除數的小數點也向右移動幾位(數位不夠的用「0」補足)然後按照除數是整數
的小數除法法則進行計算。

C. 有誰會整數劃分演算法的啊 給我具體講講吧 謝謝

整數劃分問題是將一個正整數n拆成一組數連加並等於n的形式,且這組數中的最大加數不大於n。
如6的整數劃分為

6
5 + 1
4 + 2, 4 + 1 + 1
3 + 3, 3 + 2 + 1, 3 + 1 + 1 + 1
2 + 2 + 2, 2 + 2 + 1 + 1, 2 + 1 + 1 + 1 + 1
1 + 1 + 1 + 1 + 1 + 1

共11種。下面介紹一種通過遞歸方法得到一個正整數的劃分數。

遞歸函數的聲明為 int split(int n, int m);其中n為要劃分的正整數,m是劃分中的最大加數(當m > n時,最大加數為n),
1 當n = 1或m = 1時,split的值為1,可根據上例看出,只有一個劃分1 或 1 + 1 + 1 + 1 + 1 + 1
可用程序表示為if(n == 1 || m == 1) return 1;

2 下面看一看m 和 n的關系。它們有三種關系
(1) m > n
在整數劃分中實際上最大加數不能大於n,因此在這種情況可以等價為split(n, n);
可用程序表示為if(m > n) return split(n, n);
(2) m = n
這種情況可用遞歸表示為split(n, m - 1) + 1,從以上例子中可以看出,就是最大加
數為6和小於6的劃分之和
用程序表示為if(m == n) return (split(n, m - 1) + 1);
(3) m < n
這是最一般的情況,在劃分的大多數時都是這種情況。
從上例可以看出,設m = 4,那split(6, 4)的值是最大加數小於4劃分數和整數2的劃分數的和。
因此,split(n, m)可表示為split(n, m - 1) + split(n - m, m)

根據以上描述,可得源程序如下:

#include <stdio.h>

int split(int n, int m)
{
if(n < 1 || m < 1) return 0;
if(n == 1 || m == 1) return 1;
if(n < m) return split(n, n);
if(n == m) return (split(n, m - 1) + 1);
if(n > m) return (split(n, m - 1) + split((n - m), m));
}

int main()
{
printf("12的劃分數: %d", split(12, 12));
return 0;
}
將正整數劃分成連續的正整數之和
如15可以劃分成4種連續整數相加的形式:
15
7 8
4 5 6
1 2 3 4 5

首先考慮一般的形式,設n為被劃分的正整數,x為劃分後最小的整數,如果n有一種劃分,那麼
結果就是x,如果有兩種劃分,就是x和x x + 1, 如果有m種劃分,就是 x 、x x + 1 、 x x + 1 x + 2 、... 、x x + 1 x + 2 ... x + m - 1
將每一個結果相加得到一個公式(i * x + i * (i - 1) / 2) = n,i為當前劃分後相加的正整數個數。
滿足條件的劃分就是使x為正整數的所有情況。
如上例,當i = 1時,即劃分成一個正整數時,x = 15, 當i = 2時, x = 7。
當x = 3時,x = 4, 當x = 4時,4/9,不是正整數,因此,15不可能劃分成4個正整數相加。
當x = 5時,x = 1。

這里還有一個問題,這個i的最大值是多少?不過有一點可以肯定,它一定比n小。我們可以做一個假設,
假設n可以拆成最小值為1的劃分,如上例中的1 2 3 4 5。這是n的最大數目的劃分。如果不滿足這個假設,
那麼 i 一定比這個劃分中的正整數個數小。因此可以得到這樣一個公式i * (i + 1) / 2 <= n,即當i滿足
這個公式時n才可能被劃分。

綜合上述,源程序如下
int split1(int n)
{
int i, j, m = 0, x, t1, t2;
// 在這里i + 1之所以變為i - 1,是因為i * (i - 1) / 2這個式子在下面多次用到,
// 為了避免重復計算,因此將這個值計算完後保存在t1中。並且將<= 號變為了<號。
for(i = 1; (t1 = i * (i - 1) / 2) < n; i++)
{
t2 = (n - t1);
x = t2 / i;
if(x <= 0) break;
if((n - t1) % i == 0)
{
printf("%d ", x);
for(j = 1; j < i; j++)
printf("%d ", x + j);
printf("\n");
m++;
}
}
return m;
}

D. 小數除整數的演算法

小數除整數豎式計算分析58÷1.2
解題思路:將被除數從高位起的每一位數進行除數運算,每次計算得到的商保留,余數加下一位數進行運算,依此順序將被除數所以位數運算完畢,得到的商按順序組合,余數為最後一次運算結果

解題過程:
步驟一:因為除數不為整數,首先將除數化為整數為12,被除數同時擴大同樣的倍數為:580

步驟二:58÷12=4 余數為:10

步驟三:100÷12=8 余數為:4

根據以上計算計算步驟組合結果商為48、余數為0.4

驗算:48×1.2+0.4=58

(4)整數演算法擴展閱讀&驗算結果:四則運算規則(按順序計算,先算乘除後算加減,有括弧先算括弧,有乘方先算乘方)即脫式運算(遞等式計算)需在該原則前提下進行

解題過程:
48×1.2+0.4

=57.6+0.4

=58

存疑請追問,滿意請採納

E. 整數的劃分遞歸演算法

整數的劃分遞歸演算法:0既不是正整數也不是負整數。1是一個正整數,比一個正整數大1的整數是一個正整數。-1是一個負整數,比一個負整數小1的整數是一個負整數。

F. 用演算法怎麼判斷一個數是整數

1.cin>>b 是一個標准輸入,意思是從屏幕輸入一個數賦值給b,b是實型,a是整型,
2.a=b 這里涉及一個默認轉換問題,實型賦值給整型會把小說部分丟掉!
3. b-a ,如果b是實型帶小數,那麼b就a多了小數部分,(b-a)!=0 為true了,如果b是整數,(b-a)就是0 了
,(b-a)!=0 為 false了

G. 判斷一個數是否為整數,演算法用C++來怎麼寫

double x;
scanf("%f",&x);
if((int)x==x)
printf("%f是整數",x);
把所輸入的數強制轉換為整數,然後判斷是否跟原來相等。

H. 求演算法思路:倒置整數的演算法,

#include "stdafx.h"
#include<iostream>
#include<math.h>
using namespace std;
void Reverse(int &m)//m為4位整數
{
m=1000*(m%10)+100*(m%100/10)+10*(m%1000/100)+m/1000;
}

int main()
{
int m;
cout<<"請輸入一個4位整數:"; //m為4位整數
cin>>m;
Reverse(m);
cout<<"倒置後為:"<<m<<endl;
system("pause");
return 0;
}
其他位數的整數以此類推

I. 大整數演算法是什麼

應該屬於「數據結構」吧,至少我在數據結構書上看到的。

通常把數字分段處理,然後重載運算符

舉個例子:

比如 +

假如我們認為一個int型可以從-32768~+32767

那麼我們就把數字分成
1234 5678 9012 3456 7890 1234 5678 9012 3456 7890
+1234 5678 9012 3456 7890 1234 5678 9012 3456 7890
這樣四位數做加法運算就不會出現溢出了

J. 求大數對整數取余演算法的原理

所謂求余不就是除法得到余數的過程,這個程序的演算法其實跟我們手動除法的過程是一樣的,想想我們怎麼筆算的?

舉個例子來說,4147 /3

最高位開始,4/3=1,還餘1,然後借位給低位,下一位是1,加上高一位的借位就是1×10+1=11,
11/3=3,還餘2,繼續借位給下一位=4+2×10=24,24/3=8,恰好除斷,最後一位就沒有借位了,就是7/3=2,還餘1,最後得到的余數就是4147 /3的余數

你程序中對大數求余的過程,不就是模擬我們筆算除法的過程嘛!

熱點內容
SQL寫序列 發布:2024-09-20 06:02:29 瀏覽:964
裝緩存下載 發布:2024-09-20 05:42:36 瀏覽:72
gon引擎自動回收腳本 發布:2024-09-20 05:39:39 瀏覽:247
好醫生連鎖店密碼多少 發布:2024-09-20 05:09:38 瀏覽:15
魔獸腳本代理 發布:2024-09-20 05:09:35 瀏覽:99
python登陸網頁 發布:2024-09-20 05:08:39 瀏覽:758
安卓qq飛車如何轉蘋果 發布:2024-09-20 04:54:30 瀏覽:178
存儲過程中in什麼意思 發布:2024-09-20 04:24:20 瀏覽:315
php顯示數據 發布:2024-09-20 03:48:38 瀏覽:501
源碼安裝軟體 發布:2024-09-20 03:44:31 瀏覽:354