高精度2--减法
一、心得
其实自己写之后会发现自己的思想和那些人给的思想差不多
自己先写然后再对照区看那些代码效果会好很多
/*
1、相等置为0,小置为-1,大为1
2、我的代码输出那里需要考虑两数相等,也就是a[0]==0的情况
3、小于的情况用 则用a=b-a,返回-1,则不需要交换a,b
4、修正a的位数:while(a[0]>0&&a[a[0]]==0) a[0]--; //修正a的位数
*/
二、代码及结果
自己代码
1 /* 2 减minus 3 高精度减法 4 1、逆序存储 5 2、比较减数和被减数的大小,用大数去减小数,如果被减数小,则补负号 6 3、借位相减 7 4、输出结果 8 */ 9 #include10 #include 11 #define Max 105 12 using namespace std;13 //传入数字字符串并将其逆序放在int数组中 14 int init(string s,int (&a)[Max]){15 a[0]=s.length();16 for(int i=a[0],j=0;i>=1;i--,j++){17 a[i]=s[j]-'0';18 }19 } 20 //输出逆序数组的内容21 int printArray(int a[Max]){22 for(int i=a[0];i>=1;i--){23 cout< b[0]) return true;30 if(a[0] =1;i--){33 if(a[i]>b[i]) return true;34 if(a[i] =1;i--){64 if(a[i]==0) a[0]--;65 else break;66 }67 68 69 } 70 int main(){71 int a[Max]={ 0},b[Max]={ 0};72 string s1="221423423132141313412";73 string s2="987654321012345678909";74 init(s1,a);75 init(s2,b);76 cout<<"被减数"<
给的标准代码
/*
1、相等置为0,小置为-1,大为1
2、我的代码输出那里需要考虑两数相等,也就是a[0]==0的情况
3、小于的情况用 则用a=b-a,返回-1,则不需要交换a,b
4、修正a的位数:while(a[0]>0&&a[a[0]]==0) a[0]--; //修正a的位数
*/
1 int compare(int a[],int b[]) 2 //比较a和b的大小关系,若a>b则为1,a b[0])return 1; //a的位数大于b则a比b大 5 if(a[0] =1;i--) //否则a和b的位数相同,则从高位到低位比较 7 { if(a[i]>b[i])return 1; 8 if(a[i] 0&&a[a[0]]==0) a[0]--; //修正a的位数 23 return;24 } 25 if (flag==-1)//小于 则用a=b-a,返回-1 26 { cout<<"-"; 27 for(i=1;i<=b[0];i++)28 { if(b[i] 0&&a[a[0]]==0) a[0]--; //修正a的位数 33 return;34 } 35 }