码迷,mamicode.com
首页 > 其他好文 > 详细

高精度减法

时间:2018-01-14 01:00:37      阅读:211      评论:0      收藏:0      [点我收藏+]

标签:交换   --   span   amp   cstring   数组   pos   结果   scan   

学习耗时大约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 }

 

高精度减法

标签:交换   --   span   amp   cstring   数组   pos   结果   scan   

原文地址:https://www.cnblogs.com/wwcjj/p/8280882.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!