高精度減法?!

2021-08-28 02:46:01 字數 2819 閱讀 1359

高精減

嗯輸入就不再講一遍了。儲存和之前是一樣的,倒序儲存。

減法需要借位,所以解決減法借位是關鍵。

方法如下:

if(a[i]a[i+1];//向上一位借一做十

a[i+=10];

}c[i]=a[i]-b[i];//逐位相減

這樣就可以處理借位問題。

當然,在減法中還有乙個需要處理的問題,當然這個問題很重要

減法中有被減數和減數的說法,當被減數《減數時,就需要解決結果是負數的問題

因為編譯器中不可能直接檢測出負數,所以這個時候就需要判斷兩數的大小,對它們進行交換

得出結果後,再在結果前輸出負號。

if((lenastrcmp(n1,n2)<0))
下面是更簡潔的方法:

if(n2>n1)//這一步是判斷那個數長,哪個就大,就用哪個做被減數存到陣列c中,哪個小就存到d中 

其實乙個交換函式就解決的來著:(swap萬歲!!!)

然後呢,減數還有個好玩的地方:

就是被減數減掉減數後開頭會有零,可是零不能輸出呢!

所以又有問題了:

其實解決很簡單,把開頭幾位給捨去就好

while((c[lenc]==0)&&(lenc>1))

lenc--;//輕鬆解決最高位的0不輸出問題!!!

例題:

洛谷p2142

傳送門

這一題,嗯,就是寫就是了。。。

#include 

#include

#include

using

namespace

std;

const

int maxn=100010;

char a[maxn],b[maxn];//字串存數

int c[maxn],d[maxn],h[maxn],n1,n2,i,flag=0,l=0;

int main()

if(n1>n2) swap(n1,n2); //取較長的數做for迴圈條件

for(i=0;ifor(i=0;i//借位

}if(flag==1) cout

<<"-";//如果f等於1,結果就是負數,輸出'-'

for(i=n2-1;i>=0;i--)//這步很重要!!! 這是在輸出時把首位的0都去掉

}if(l!=0)//如果l不等於0,就說明這時的0有實際意義,要輸出

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

}}

對不起各位!!!

這個題解是錯的!!!

正解在下!!!

其實上面題解也有可借鑑的地方所以博主還是不刪除了

/吐舌

#include

#include

#include

using

namespace

std;

string a,b,c;

int ans[10010],sum;

bool p,q=1;

int main()

else

if(a.length()>b.length()) p=1;

else

if(a.length()0;

else

if(a.length()==b.length())

if(!p) swap(a,b);

sum=a.length()-b.length();

for(int i=0;i"0";

b=c+b;

for(int i=a.length()-1;i>=0;i--)

}if(!p) cout

<<'-';

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

沒有注釋,請各位諒解!!!

上面那個題解錯是在於:

沒有考慮相減結果等於零的條件還有

沒有考慮兩數長度相同的時候!!!

下面是乙個比較直接的題解,在洛谷過不去,但是當測試程式還是可以的。

#include

#include

#include

const

int maxn=100010;

using

namespace

std;

int a[maxn],b[maxn],c[maxn],lena,lenb,lenc,i;

char n[maxn],n1[maxn],n2[maxn];

int main()

lena=strlen(n1);

lenb=strlen(n2);

for (i=0;i<=lena-1;i++)

a[lena-i]=int(n1[i]-'0');

for (i=0;i<=lenb-1;i++)

b[lenb-i]=int(n2[i]-'0');

i=1;

while (i<=lena||i<=lenb)

c[i]=a[i]-b[i];

i++;

}lenc=i;

while ((c[lenc]==0)&&(lenc>1))

lenc--;

for (i=lenc;i>=1;i--)

cout

0;}

高精度減法

題目描述 高精度減法 輸入輸出格式 輸入格式 兩個數 第二個可能比第乙個大 輸出格式 結果 是負數要輸出負號 輸入輸出樣例 輸入樣例 1 2 1 輸出樣例 1 1說明 這也沒什麼好說的,沒什麼特別的要求,就是乙個普普通通的高精減。程式如下 const max 500 var s integer a,...

高精度減法

description 輸入兩個整數a和b,輸出這兩個整數的差。a和b都不超過100位。input 輸入包括兩行,第一行為乙個非負整數a 被減數 第二行為乙個非負整數b 減數 兩個整數都不超過100位,兩數的最高位都不是0。output 輸出一行,表示a b的值。sample input 99999...

高精度減法

1 高精度減法 模板 高精度減法 模板題 acwing 792.高精度減法 比較a是否大於等於b bool cmp vectora,vectorb vectorsub vectora,vectorb while c.size 1 c.back 0 c.pop back return c acwing...