高精度運算

2022-05-30 11:39:14 字數 4104 閱讀 9959

#include#include#includeusing namespace std;

int main()

for (i = 0; i < b.length(); i++)

else

} if (a.length() > b.length())

else

i++;

} }if (f == 1)

for (j = i - 1; j >= 0; j--)

return 0;

}

#include#include#includeusing namespace std;

#define maxsize 10100

//比較大小 1:a大 2:b大

int compare(string a, string b)

else if(a.length() < b.length())

else

else if (b[i] > a[i])

} }if (flag == 0)

}int main()

//若b比a大,先輸出乙個負號,交換a,b

if (c == 2)

reverse(a.begin(), a.end());

reverse(b.begin(), b.end());

int atemp, btemp;

for (i = 0; i < b.length(); i++)

else

}if (a.length() > b.length())

else

i++;

} }int zero = 0;

//3330000000000000

//3320000000000000

//0010000000000000前面的0不能輸出

for (j = i - 1; j >= 0; j--) //前面的0不輸出

if (zero)

}return 0;

}

#include#include#includeusing namespace std;

int c[5001];

int ans[5001];

int main()

reverse(a.begin(), a.end());

reverse(b.begin(), b.end());

int f, f2, i, j, k, m;

//f乘法進製,f2每位結果相加進製

int prel,length;

//迴圈,每一位被乘數

for (i = 0; i < b.length(); i++)

//與被乘數每一位相乘

for (j = 0; j < a.length(); j++)

else

k++;

} //最後一位的進製

if (f != 0)

// 乘數第一位乘被乘數的結果賦給ans,方便後期相加

if (i == 0)

prel = k;//前乙個結果的長度

} else

else

m++;

}if (prel != k )

else

m++;

}

}if (f2 != 0)

prel = m;

} }

for (int w = prel-1; w >= 0; w--)

cout << endl;

return 0;

}

#include#include//高精度/低精度

using namespace std;

#define maxsize 5010

//int main()

int temp = 0;

j = 0;

for (i = 0; i < a.length(); i++)

else

j++;

} int zero = 0;

//cout << temp << endl;

for (i = 0; i < j; i++)

if (zero)

} return 0;

}

搬運工

#include #include using namespace std;

//去除前導0

int delprezero(int x, int xlen)

return i;

}//逆序輸出陣列值

void printarr(int x, int xlen)

cout << endl;

}//若x>=y返回true,否則返回false

bool compare(int x, int y, int xlen, int ylen)

if (xlen == ylen)

if (x[i] < y[i])

}return true;

}return true;

}//若x>=y,則x的高位減去y(只減一次),返回值為x的新長度

int sub(int x, int y, int z, int xlen, int ylen)

}if (zloc < 0)

return xlen;

//當前被除數x的高位與除數y做一次減法運算

for (int i = zloc, j = 0; i < xlen && j < ylen; i++, j++)

x[i] -= y[j];

}//商的相應位置加一

z[zloc]++;

//計算當前被除數x的真實長度

while (x[xlen - 1] == 0)

xlen--;

if (xlen <= 0)

xlen = 1;

return xlen;

}int main() , b[301] = , c[301] = ;

int alen = 0, blen = 0, clen = 1, maxlen = 0;

int i;

//輸入

cin >> as >> bs;

alen = strlen(as);

blen = strlen(bs);

//被除數和除數分別逆序存放

for (i = 0; i < alen; i++)

for (i = 0; i < blen; i++)

//去除前導0

alen = delprezero(a, alen);

blen = delprezero(b, blen);

//通過從高位開始連續減去除數,計算商和餘數

clen = alen - blen + 1;

while (compare(a, b, alen, blen))

//解決商的位數是0或負數的情況

if (clen < 1)

//去除商的前導0

clen = delprezero(c, clen);

//輸出商c

printarr(c, clen);

//輸出餘數a

printarr(a, alen);

return 0;

}

用高精度計算出s=1!+2!+3!+…+n! (n≤50)s=1!+2!+3!+…+n!(n≤50)

#includeusing namespace std;

int a[2000];

int b[2000];

int c[2000];

int sum[2000];

void pplus(int* a, int* c)

}void cheng(int* a, int c)

}int main()

bool flag = 0;

for (int i = 1000; i >= 1; i--)

}

高精度運算

今天覆習了一下高精度運算。我覺得這種簡單的東西也得看一看,至少給自己留點兒低!高精度可以壓位的,但我今年懶得寫了 首先是加減法很簡單了,沒什麼值得特別強調的。高精度減法時別忘了,a時做下交換在計算,輸出時別忘了標記負號。高精度乘法需要注意的問題是,要在做完乘法之後再調整為十進位制。有的初學者小盆友喜...

高精度運算

雖說高精度直接考查的越來越少,不過還是以防萬一。define maxlen 1000 struct bint 本模板既可輸入字串,也可輸入整數 bint int t if len 1 len bint char str print number friend void print bint bi p...

高精度運算

name 高精度運算 author goal00001111 date 01 12 08 15 04 description 高精度運算 加減乘除,乘方,階乘 include include using namespace std void reverse string str void addin...