题目描述 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 <iostream> 2 #include <string.h> 3 #include <math.h> 4 5 using namespace std; 6 7 int main() 8 { 9 char a[600],b[600];//计算a-b 10 cin>>a>>b; 11 //scanf("%s %s",la,lb); 12 int la=strlen(a),lb=strlen(b),l=0; 13 int an[600],bn[600]; 14 if(la>lb) 15 { 16 for(int i=la-1;i>=la-lb;i--) 17 bn[i]=b[i-(la-lb)]-‘0‘; 18 for(int i=0;i<=la-lb-1;i++) 19 bn[i]=0; 20 for(int i=0;i<=la-1;i++) 21 an[i]=a[i]-‘0‘; 22 l=la-1; 23 } 24 else if(la<lb) 25 { 26 for(int i=lb-1;i>=lb-la;i--) 27 an[i]=a[i-(lb-la)]-‘0‘; 28 for(int i=0;i<=lb-la-1;i++) 29 an[i]=0; 30 for(int i=0;i<=lb-1;i++) 31 bn[i]=b[i]-‘0‘; 32 l=lb-1; 33 } 34 else 35 { 36 for(int i=0;i<=la-1;i++) 37 an[i]=a[i]-‘0‘; 38 for(int i=0;i<=lb-1;i++) 39 bn[i]=b[i]-‘0‘; 40 l=la-1; 41 } 42 int flag=0; 43 for(int i=0;i<=l;i++) 44 { 45 if(an[i]>bn[i]) 46 { 47 flag=1; 48 break; 49 } 50 if(an[i]<bn[i]) 51 { 52 flag=2; 53 break; 54 } 55 } 56 if(flag==1) 57 { 58 for(int i=l;i>=0;i--) 59 { 60 an[i]-=bn[i]; 61 while(an[i]<0&&i!=0) 62 { 63 an[i]+=10; 64 an[i-1]--; 65 } 66 } 67 for(int i=0;i<=l;i++) 68 cout<<an[i]; 69 cout<<endl; 70 } 71 else if(flag==2) 72 { 73 for(int i=l;i>=0;i--) 74 { 75 bn[i]-=an[i]; 76 while(bn[i]<0&&i!=0) 77 { 78 bn[i]+=10; 79 bn[i-1]--; 80 } 81 } 82 cout<<"-"; 83 for(int i=0;i<=l;i++) 84 cout<<bn[i]; 85 cout<<endl; 86 } 87 else 88 cout<<"0"; 89 return 0; 90 }
做过很多遍了 再做一次
暴力解法
原文地址:https://www.cnblogs.com/yalphait/p/8485701.html
时间: 2024-11-06 03:54:48