1. 程式人生 > >高精度減法運算

高精度減法運算

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); } else
if(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; }

高精度減法運算