高精度總結

2021-05-22 23:29:12 字數 3292 閱讀 1185

整數》字串(高精度常用):

string int_to_str(int a)  //整數轉為字串

string result;

while(a)

result.insert(0,1,a%10+'0');

a /= 10;

return result;

}字串》整數:

int str_to_int(string a)

int result = 0;

int s = 0;

while(sresult = result*10 + a[s++]-'0';

return result;

}加法:

string high_add(string a,string b)

a.insert(0,1,'0');

b.insert(0,1,'0');

if(a.size()>b.size())

b.insert(0,(int)a.size()-(int)b.size(),'0');

else if(a.size()a.insert(0,(int)b.size()-(int)a.size(),'0');

int ci = 0;

int n = a.size();

int x = 0;

for(int i = n-1;i>=0;i--)

{    x = a[i]-'0'+b[i]-'0'+ci;

if(x>=10)

{    ci = x/10;  //順序不能顛倒

x  = x%10;

else

ci = 0;

a[i] = x + '0';

while(1)//輸出控制

{    if(a[0]=='0'&&a.size()!=1)

a.erase (a.begin (),a.begin ()+1);       

else break;

return a;

減法:(直接利用加法)

乘法:string high_mut(string a,string b)  //還利用了vector,演算法有待改進

vectorx;    //轉換到vector中

vectory;

int n = a.size();

x.assign(n,0);

int m = b.size();

y.assign(m,0);

for(int i = 0;ix[i] = a[i]-'0';

for(int i = 0;iy[i] = b[i]-'0';

vectorr;

r.assign(n+m,0);

//計算

string result;

int c = 0;

for(int i = m-1;i>=0;i--)

int site = n+m-1;

for(int j = n-1;j>=0;j--)

r[site-c] += x[j]*y[i];

site--;

c++;

for(int i = n+m-1;i>=0;i--)

if(r[i]>=10)

r[i-1] += r[i]/10;

r[i] = r[i]%10;                    

result.insert(0,1,r[i]+'0');

//輸出控制

while(1)

if(result[0]=='0'&&result.size()!=1)

result.erase (result.begin (),result.begin ()+1);           

else break;

return result;

除法:string high_div(string a,int b)  //獲得a/b的結果,類似整除,但是是用字元實現

string result;

int temp = a[0] - '0';

int s = 1;

go_on:

while(temptemp = temp*10 + a[s++] - '0';

if(tempresult += '0';

result += temp/b + '0';

temp = temp%b;

if(s goto go_on;

else    

while(result[0] == '0'&&result.size()>1)

result.erase(result.begin());

return result;

模除   :

int high_mod(string a,int b)

string result;

int temp = a[0] - '0';

int s = 1;

go_on:

while(temptemp = temp*10 + a[s++] - '0';

if(tempresult += '0';

result += temp/b + '0';

temp = temp%b;

if(s goto go_on;

else

return temp;

階乘:string high_n(int m)

int n  = m;

string sum = "1";

for(int i = n;i>=2;i--)

string temp = int_to_str(i);  //呼叫轉換函式

sum = high_mut(sum,temp);//高精度乘法

return sum;

進製轉換:

string base_m(int n,int m)//把n轉換為m(m<=36)進製數,最大數用z表示

string temp;     //儲存n的進製數

string temp2;

int x = 0;

while(n >= m)

x = n%m;

n = n/m;

temp2 += '0'+x;

if(temp2[0] > '9')

temp2[0] = 'a'+x-10;

temp.insert(0,temp2);

temp2.clear();

temp2 += '0'+n;

if(temp2[0] > '9')    

temp2[0] = 'a'+n-10;

temp.insert(0,temp2);

return temp;

高精度運算總結

日期 2022年5月18日 資料型別 定義識別符號 資料範圍 整型int 231 231 1 2 109 長整型long long 263 263 1 無符號長整型 unsigned long long 0 264 1 上面給出的範圍的數稱為單精度數,對應的運算稱為單精度運算。超出上面給出的範圍的數...

高精度除法(高精度除以高精度)

先貼乙個簡單的高精度除以單精度的 include include include using namespace std int main else ys ys 10 a i 0 while c i 0 i for int j i j 0 j printf d c j if ys printf d ...

高精度除高精度

演算法流程 第一步,讀入被除數 a 和 除數 b,判斷是否 a b,是則輸出 0 並結束演算法,否則令 answer 0 第二步,令餘數 remainder 0,令 i 從被除數最高位的下標開始 第三步,令 remainder remainder 10 a i 令 c 9 第四步,判斷是否 b c ...