高精度減法運算
阿新 • • 發佈:2018-02-08
col algorithm fin 比較 int 如果 轉換 put ()
eg:計算10002-99的差
①
#include "stdio.h" #include "string.h" #include "algorithm" #define N 3005 using namespace std; int cmp(char a[],char b[]) //比較兩個數大小 { //如果 a>b返回1,a=b返回0,a<b返回-1 int lena=strlen(a); int lenb=strlen(b); if(lena>lenb)return 1; if(lena==lenb)return strcmp(a,b); if(lena<lenb)return -1; } void sub(char a[],char b[],char c[]) { int t,i,r=0; int res=cmp(a,b); if(res<0) //如果第一個數小,需要交換 { strcpy(c,a); strcpy(a,b); strcpy(b,c); } elseif(res==0) //如果相等直接跳出 { strcpy(c,"0"); return; } strrev(a); //逆序 strrev(b); //逆序 for(i=0;b[i]!=‘\0‘;i++) //低位至高位 { t=(a[i]-‘0‘-r)-(b[i]-‘0‘); //每位上的相減 if(t<0) { r=1; //向高位借1 t=t+10; } else r=0; //不借位 c[i]=t+‘0‘; //結果轉換為字符 } for(;a[i]!=‘\0‘;i++) //a中剩下的還需考慮借位 { t=a[i]-‘0‘-r; if(t<0) { r=1; t=t+10; } else r=0; c[i]=t+‘0‘; } while(c[i-1]==‘0‘) //去除前導0 i--; if(res<0) //若結果為負 c[i++]=‘-‘; c[i]=‘\0‘; //結尾 strrev(c); //逆序回正常 } int main() { char a[N],b[N],c[N]; scanf("%s %s",a,b); sub(a,b,c); puts(c); return 0; }
高精度減法運算