高精減
嗯輸入就不再講一遍了。儲存和之前是一樣的,倒序儲存。
減法需要借位,所以解決減法借位是關鍵。
方法如下:
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...