大數模板(加 減 乘 除)

2021-09-10 15:38:05 字數 3851 閱讀 5407

實現兩數的加減乘除,如果兩個數可以被存在變數裡,可以直接呼叫運算子,但是當兩個數不足以被變數容納時就會產生溢位等問題,這時可以用高精度演算法來解決。

高精度演算法主要是借助陣列來儲存資料,比如乙個值有200位數,這時不可能直接儲存在乙個變數裡,但可以開乙個200長度的陣列,來記錄這個數的每一位數,就可以容納下它了,並且通過模擬加減乘除來進行運算,實現位數很大的兩個數之間的運算。

1、高精度加法

#include

#include

#include

#include

#include

using namespace std;

string str1, str2;

int a[

205]

, b[

205]

;int len;

intmain()

len++

;while

(a[len]==0

&& len>1)

//>1很重要,有可能是0

len--

;for

(int i=len; i>=

1; i--

)printf

("%d"

, a[i]);

printf

("\n");

return0;

}

2、高精度減法

注意當被減數小於減數時,打出乙個負號,然後把被減數當減數,減數當被減數計算的情況。

#include

#include

#include

#include

#include

using namespace std;

intcompare_string

(string s1, string s2)

;string str1, str2;

int a[

205]

, b[

205]

;int

main()

} a[0]

++;//相當於加法的len++

while

((a[a[0]

]==0)

&& a[0]

>1)

a[0]

--;for(

int i=a[0]

; i>=

1; i--

)printf

("%d"

, a[i]);

printf

("\n");

}else

} b[0]

++;while

((b[b[0]

])==0

&& b[0]

>1)

b[0]

--;//相當於加法的len++

for(

int i=b[0]

; i>=

1; i--

)printf

("%d"

, b[i]);

printf

("\n");

}return0;

}int

compare_string

(string s1, string s2)

return0;

//如果長度相同,每一位也一樣,就返回0,說明相等

}

3、高精度乘法

#include

#include

#include

#include

#include

using namespace std;

string str1, str2;

int a[

205]

, b[

205]

, c[

505]

;int len;

intmain()

} len=a[0]

+b[0]+

1;//高出一位,並去掉前導0

while

((c[len]==0

)&& len>1)

len--

;for

(int i=len; i>=

1; i--

)printf

("%d"

, c[i]);

printf

("\n");

return0;

}

4、高精度除法

1)高精除以低精

#include

#include

#include

#include

#include

using namespace std;

string str1;

int a[

205]

, c[

205]

;int b, lena, lenc, x=0;

intmain()

lenc=1;

while

(c[lenc]==0

&& lenclenc++

;for

(int i=lenc; i<=lena; i++

)printf

("%d"

, c[i]);

printf

("......%d"

, x)

;printf

("\n");

return0;

}

2)高精除以高精

#include

#include

#include

#include

#include

using namespace std;

string str1, str2;

int a[

205]

, b[

205]

, c[

205]

;//比較a,b,若a>b為1;若aint

compare_string

(int a,

int b)

return0;

}void

subduction

(int a,

int b)

//計算a=a-b

if(flag==1)

a[i]

-=b[i];}

while

(a[a[0]

]==0&& a[0]

>1)

a[0]

--;//刪除前導0

return;}

}int

main()

}//商

while

(c[c[0]

]==0&& c[0]

>1)

c[0]

--;for(

int i=c[0]

; i>=

1; i--

)printf

("%d"

, c[i]);

printf

("\n");

//餘數

for(

int i=a[0]

; i>=

1; i--

)printf

("%d"

, a[i]);

printf

("\n");

return0;

}

大數加減乘除

include include include include includeusing namespace std compare比較函式 相等返回0,大於返回1,小於返回 1 int compare string str1,string str2 if cf 0 str char cf 0 st...

大數加減乘除

對於大數的加減乘除都要先把輸入的大數字串轉成倒序的陣列,再進行運算。字串的處理 scanf s s a1,b1 len 0 for int i strlen a1 1 i 0 i len 0 for int i strlen b1 1 i 0 i len max strlen a1 strlen b...

大數高精度加減乘除模板

大數高精度加減乘除的模板 include include using namespace std inline int compare string str1,string str2 高精度加法 string add int string str1,string str2 else else els...