試題 算法提高 高精度減法
資源限制
時間限制:1.0s 內存限制:256.0MB
問題描述
高精度減法
輸入格式
兩行,表示兩個非負整數a、b,且有a > b。
輸出格式
一行,表示a與b的差
樣例輸入
1234567890987654321
9999
樣例輸出
1234567890987644322
代碼
#include<stdio.h>
#include<string.h>
int main(){
char a[10000],b[10000];
int c[10000],sa,sb,i;
scanf("%s\n%s",a,b);
sa=strlen(a);
sb=strlen(b);
for(i=0;i<sa;i++){
/**
* 1.先按位相減結果賦值給數組c
* 2.判斷值釋放小於0,小於0說明不夠減就從前一位借1即把值加10
* 3.判斷前一位是否爲0,爲0說明不夠借所以自己從它的前一位借1自己變成9
* 4.找到大於0的位借出去1那自身就減1
* 5.前面的sb位減完後剩下的直接賦值就可以了
*/
if(i<sb){
c[sa-1-i]=a[sa-1-i]-b[sb-1-i];
if(c[sa-1-i]<0){
c[sa-1-i]+=10;
int k=sa-2-i;
while(a[k]=='0'){
a[k--]='9';
}
a[k]-=1;
}
continue;
}
c[sa-1-i]=a[sa-1-i]-'0';
}
if(c[0]!=0){// 判斷第一位是否爲0不爲0就輸出
printf("%d",c[0]);
}
for(i=1;i<sa;i++){
printf("%d",c[i]);
}
return 0;
}