学习耗时大约15分钟,个人认为原理较简单,高精度算法实际上还是相当于把小学学的代数知识给程序化了。
1 #include<cstring> 2 #include<iostream> 3 #define MAXLEN 110 4 using namespace std; 5 int main(){ 6 int a[MAXLEN], b[MAXLEN], c[MAXLEN], lena, lenb, lenc,i;//存储减数被减数及他们的长度 7 char n[MAXLEN], n1[MAXLEN], n2[MAXLEN];//字符串形式的减数和被减数 8 memset(a,0,sizeof(a)); memset(b,0,sizeof(b)); 9 memset(c,0,sizeof(c)); 10 scanf("%s%s",n1,n2) ;//输入减数和被减数 11 //strcmp()为字符串比较函数,当n1 ==n2,返回0 12 // n1>n2时,返回正整数,n1<n2时,返回负整数 13 if(strlen(n1) < strlen(n2) || (strlen(n1) == strlen(n2) && strcmp(n1, n2)<0)){ 14 //处理减数和被减数,交换被减数和减数 15 strcpy(n,n1);//将n1数组的值完全赋给n数组 16 strcpy(n1,n2); 17 strcpy(n2, n); 18 cout << "-";//交换了减数和被减数,结果为负数 19 } 20 21 lena = strlen(n1); lenb= strlen(n2); 22 for(i = 0;i <= lena - 1; i++) a[lena - i] = n1[i] -‘0‘;//被减数放入a数组 23 for(i = 0;i <= lenb - 1; i++) b[lenb-i]=n2[i] - ‘0‘;//减数放入b数组 24 i = 1; 25 while(i <= lena || i<= lenb){ 26 if(a[i] < b[i]){ 27 a[i] +=10;//不够减则向高位借1当10 28 a[i + 1]--; 29 } 30 c[i] = a[i] - b[i];//对应位相减 31 i++; 32 } 33 lenc = i; 34 while((c[lenc] == 0) && (lenc > 1)) lenc--;//最高位上0不输出 35 for(i = lenc;i >= 1; i--) cout << c[i];//输出结果 36 cout<<endl; 37 }