A-B 练习【大数减法举例】
A-B
Time Limit: 1000ms Memory limit: 65536K 有疑问?点这里^_^
题目描述
题目链接:http://acm.sdut.edu.cn/sdutoj/problem.php?action=showproblem&problemid=2102
每读入两个整数,输出其差。
输入
输入数据含有不超过50个的整数对,每个整数和每对整数的运算结果都不会超过±2^31。
输出
对于每次读入的一对整数,输出前者减去后者的差。每个结果应以回车结束。
示例输入
1 3 5 7
示例输出
-2 -2
提示
很明显,这是一道在整型范围内的减法运算,但是网上也找不到有关大数减法的题目,用这道题目抛砖引玉,也勉强凑合~
代码:
1 #include<iostream> 2 #include<string.h> 3 #include<stdlib.h> 4 using namespace std; 5 int main() 6 { 7 char f1[110],g1[110]; 8 while(cin>>f1>>g1) 9 { 10 int f[110]={0},g[110]={0}; 11 int i,j; 12 int t=strlen(f1),s=strlen(g1); 13 for(i=t-1,j=0;i>=0;i--,j++) 14 f[j]=f1[i]-'0'; 15 for(i=s-1,j=0;i>=0;i--,j++) 16 g[j]=g1[i]-'0'; 17 int sum[110]={0},flag=0; 18 int up=0; 19 if((t==s&&strcmp(f1,g1)>=0)||t>s)//此处的if else 是大数减法的核心代码 20 { 21 for(i=0;i<=105;i++) 22 { 23 if(f[i]>=g[i]) 24 sum[i]=f[i]-g[i]; 25 else 26 { 27 sum[i]=f[i]-g[i]+10; 28 f[i+1]--; 29 } 30 } 31 } 32 else 33 { 34 flag=1; 35 for(i=0;i<=105;i++) 36 { 37 if(g[i]>=f[i]) 38 sum[i]=g[i]-f[i]; 39 else 40 { 41 sum[i]=g[i]-f[i]+10; 42 g[i+1]--; 43 } 44 } 45 } 46 if(strcmp(f1,g1)==0) 47 { 48 cout<<"0"<<endl; 49 continue; 50 } 51 if(flag==1) 52 cout<<"-"; 53 for(i=105;i>=0;i--) 54 if(sum[i]!=0) 55 { 56 while(i>=0) 57 { 58 cout<<sum[i]; 59 i--; 60 } 61 break; 62 } 63 cout<<endl; 64 } 65 return 0; 66 }