【noi】1.6_11大整數減法
阿新 • • 發佈:2021-01-10
[noi]1.6_11大整數減法
總時間限制: 1000ms 記憶體限制: 65536kB
描述
求兩個大的正整數相減的差。
輸入
共2行,第1行是被減數a,第2行是減數b(a > b)。每個大整數不超過200位,不會有多餘的前導零。
輸出
一行,即所求的差。
樣例輸入
9999999999999999999999999999999999999
9999999999999
樣例輸出
9999999999999999999999990000000000000
#include<bits/stdc++.h>
using namespace std;
string stra,strb,strc;
int main(){
cin>>stra>>strb;
while(stra.length()>strb.length()){
strb='0'+strb;
}
int jie=10;
for(int i=stra.length()-1;i>=0;i--){
if(stra[i]<strb[i]){
stra[i]=char(stra[i]-'0'+jie+'0');
stra[i-1]=char(stra[i-1]-'0'-1+'0');//別忘記最後加'0
}
strc=char(stra[i]-'0'-(strb[i]-'0' )+'0')+strc;
}
//cout<<"strc="<<strc;
int flag=0,flag1=0;
for(int i=0;i<=strc.length()-1;i++){
if(strc[i]=='0' && flag1==0){
flag=1;
}else{
flag=0;
flag1=1;
cout<<strc[i];
}
}
if(flag) cout<<"0";
return 0;
}
總結:
一、還是用把兩個陣列補齊位數,從最後一位算起開始計算的方法
int jie=10;
for(int i=stra.length()-1;i>=0;i--){
if(stra[i]<strb[i]){
stra[i]=char(stra[i]-'0'+jie+'0');
stra[i-1]=char(stra[i-1]-'0'-1+'0');//別忘記最後加'0
}
strc=char(stra[i]-'0'-(strb[i]-'0')+'0')+strc;
}
1000-999,倒數第二位的0,第一位借位後,
stra[i-1]=char(stra[i-1]-'0'-1+'0');//別忘記最後加'0
‘0’-‘0’-1+'0’結果為:0-1+‘0’,-1+48=47,再經過轉換變為47對應的字元存入陣列,
i++,執行程式碼
stra[i]=char(stra[i]-'0'+jie+'0');
-1+10+‘0’,經轉換,剛好是’9’.