首页 > 代码库 > wiki oi 3115高精度练习之减法
wiki oi 3115高精度练习之减法
题目描述 Description
给出两个正整数A和B,计算A-B的值。保证A和B的位数不超过500位。
输入描述 Input Description
读入两个用空格隔开的正整数
输出描述 Output Description
输出A-B的值
样例输入 Sample Input
3 12
样例输出 Sample Output
-9
数据范围及提示 Data Size & Hint
两个正整数的位数不超过500位
代码:
1 #include<stdio.h> 2 #include<string.h> 3 #include<math.h> 4 #include<iostream> 5 #include<algorithm> 6 using namespace std; 7 char a[501],b[501]; 8 int c[500]; 9 int cp(char a[],char b[])//比较两个大数的大小,a大返回1,b大返回2,一样大返3;10 {11 int i=strlen(a),j=strlen(b);12 if(i>j)return 1;13 else if(j>i)return 2;14 else if(i==j)15 {16 for(int k=0; k<j; k++)17 {18 if(a[k]>b[k])return 1;19 if(a[k]<b[k])return 2;20 }21 return 3;22 }23 }24 int main()25 {26 memset(c, 0, sizeof(c));27 cin>>a>>b;28 int cmp=cp(a,b);29 if(cmp==3)printf("0\n"); //一样大直接输出0;30 int lena=strlen(a);31 int lenb=strlen(b);32 int i=lena-1,j=lenb-1,k=0;//注意长度减一;33 int carry=0;//设置进位,开始为0;34 while(i>=0&&j>=0)//先处理两个大数在相同位数那一段相减;模拟手算35 {36 int cc;//注意a,b转换成int型37 if(cmp==1)cc=(a[i]-‘0‘)-(b[j]-‘0‘)-carry;//如果a大,用a-b;38 else if(cmp==2)cc=(b[j]-‘0‘)-(a[i]-‘0‘)-carry;//b大,用b-a;39 if(cc<0)//减了要判断是不是负数40 {41 c[k++]=cc+10;//负数要加10;42 carry=1;//加10后要向前-1;43 i--;j--;44 }45 else46 {47 c[k++]=cc;//正数直接赋值48 carry=0;//进位不用减49 i--;j--;50 }51 }52 /* 调试代码,你懂得!53 for(int l=k;l>=0;l--)printf("%d",c[l]);printf("\n");54 printf("%d %d\n",i,j);55 下面处理多出的那一段;56 */57 if(cmp==1&&i>=0){//a长些或者大些就把a多出b的部分直接赋值给c,注意同时进位也得继续补上,避免1000-1跪;58 while(i>=0){59 int cc=a[i--]-‘0‘-carry;//同样转int60 if(cc<0){c[k++]=cc+10;carry=1;}61 else {c[k++]=cc;carry=0;}62 }63 }64 if(cmp==2&&j>=0){//b长些或者大些就把b多出a的部分直接赋值给c,注意同时进位也得继续补上,避免1000-1跪;65 while(j>=0){66 int cc=b[j--]-‘0‘-carry;//同样转int67 if(cc<0){c[k++]=cc+10;carry=1;}68 else {c[k++]=cc;carry=0;}69 }70 }71 if(cmp==2)printf("-");//b大就输出负号;72 int last=0;73 for(int l=0;l<k;l++)if(c[l]!=0)last=l;//找出第一个不为0的数74 for(int l=last;l>=0;l--)printf("%d",c[l]);//因为是从c[0]开始先存个位,所以倒着输出75 printf("\n");76 return 0;77 }
wiki oi 3115高精度练习之减法
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。