大數計算 總結

2021-08-09 02:35:05 字數 2916 閱讀 6418

大數加法

大數減法

高精度乘法

高精度除以低精度

大整數的因子

冪運算 階乘 階乘和

貼一下**

#include

using

namespace

std;

1、對資料進行判斷處理 swap strlen strcmp

2、進行反向儲存

3、進行計算,進製 借位(一般可以不與進製數進行比較,直接進製,因 為前置零可以去除),注意最後一位的處理

進製:

階乘:a[n]=a[n]*j;

a[n+1]+=a[n]/n;

a[n]%=n;

乘法:a[i+j]+=a[i]*a[j];

a[i+j+1]+=a[i+j]/n;

a[i+j]%=n;

借位:

a[i]+=10; a[i+1]–; c[i]=a[i]-b[i];

c[i]=(x*10+a[i])/b;

x=(x*10+a[i])%b;

4、前置零清除:while(s[s[0]]==0)–s[0];

主要思路就是數字用字元陣列反向讀入,然後最好判斷一下長度,把長的放在前面然後做讀入。做完之後從後面依次進製,

進製的時候要注意最後一位的處理!!!

以後盡量不用字串第乙個a[0].

//交換字串

void swap(char *p,char *q)

//用a[0]讀字元陣列的長度,反向讀入字元陣列將他變成整型方便計算

//盡量把這個寫成函式

a[0] = strlen(s);

for(i=1;i<=a[0];++i)

a[i]=s[s[0]-i]-48;

//進製

while(i<=l1||i<=l2)

c[i]=x;//很重要!!!!

while(c[i]==0)i--;//去除前置零

for(j=i;j>=1;++j)cout

《總得來說和大數加法差不多 這裡是借位 然後最重要的是首先要判斷那個哪個大。同樣要注意最後一位

//判斷字串

if(strlen(s1strlen(s1)==strlen(s2)&&strcmp(s1,s2)<0)

//借位

t2=min(strlen(s1),strlen(s2));

while(i<=t2)

else

}while(aa[t1]==0) --t1;

for(i=t1;i>=1;--i)cout

《最重要的就是進製思想是首先反向存入,然後就是進製處理

for(i=0;i

i) for(j=0;j

j) k=la+lb;

while(cc[k]==0)--k;

而且其實這裡不需要反向存入,直接從前面開始除就好了

但是需要反向輸出

就是乙個公式

for(i=0;i1-i]-48;

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

while(cc[la-1]==0&&la>1)--la;

for(i=la-1;i>=0;--i) cout

for(j=2;j<=9;++j)

if(t==0)

}

t=t*10+c[i]-48;

t%=n;

冪運算和階乘運算一致,先進行進製,最後處理最高位。乘一次變一次

//引入第三個陣列

for(y=1;y<=n;++y)

while(b[b[0]+1]>0)

for(i=1;i<=b[0];++i)a[i]=b[i];

a[0]=b[0];

//引入餘數

for(j=1;j<=n;++j)

while(k)//記錄進製

}

#includeusing namespace std;

int a[100000010];

char c [60];

int main()

for(i=1; i<=len; i++)

}while(a[len

+1]>0)

}for(i=len; i>=1; i--)

printf("%d",a[i]);

}

c[j]=c[j]*i+k;

k=c[j]/10;

c[j]

%=10;

if(k>0&&j>=len)++len;

階乘和就是運用兩個階乘相加

#include

using

namespace

std;

int a[50000]=;

int s[55000]=;

int b[50000]=;

int r[55000]=;

int main()

while(b[b[0]+1]>0)

for(i=1;i<=b[0];++i)a[i]=b[i];

a[0]=b[0];

memset(r,0,sizeof(r));

r[0]= max(a[0],s[0]);

for(k=1;k<=r[0];++k)

while(r[r[0]+1]>0)

s[0]=r[0];

for(i=1;i<=r[0];++i)s[i]=r[i];

}while(s[s[0]]==0)--s[0];

for(i=s[0];i>=1;--i)cout

0;

}

大數間的乘法計算 大數計算

前幾天,朋友碰到了乙個大數計算的問題,匆忙之下我寫了乙個出來。說實話寫的不怎麼好,有點亂,先貼出來,然後過幾天再改好,貼一下。如計算 9999999999999 1234567890123 package test public class bignumber public static doubl...

階乘計算 大數計算

輸入乙個正整數n,輸出n 的值。其中n 123 n。演算法描述 n 可能很大,而計算機能表示的整數範圍有限,需要使用高精度計算的方法。使用乙個陣列a來表示乙個大整數a,a 0 表示a的個位,a 1 表示a的十位,依次類推。將a乘以乙個整數k變為將陣列a的每乙個元素都乘以k,請注意處理相應的進製。首先...

精度計算 大數加大數

本演算法是用來計算乙個大數 現有的資料型別無法表示的數 加上乙個大數 現有的資料型別無法表示的數 演算法思路是把作為被加數和加數的大數的每一位都當做乙個字元分別放入乙個字元陣列中,再把加數的各個位與被加數的各個位從最低位依次相加,將結果存放在乙個字元指標中,最後再放入乙個結果陣列中。下面是我的c語言...