實現兩數的加減乘除,如果兩個數可以被存在變數裡,可以直接呼叫運算子,但是當兩個數不足以被變數容納時就會產生溢位等問題,這時可以用高精度演算法來解決。
高精度演算法主要是借助陣列來儲存資料,比如乙個值有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...