Description
输入两个整数a和b,输出这两个整数的差。a和b都不超过100位。
Input
输入包括两行,第一行为一个非负整数a(被减数),第二行为一个非负整数b(减数)。两个整数都不超过100位,两数的最高位都不是0。
Output
输出一行,表示a - b的值。
Sample Input
99999999999999999999 99999999 123 321
Sample Output
99999999999900000000 -198
思路:典型的高精度问题,当大数减小数好说,关键是考虑怎么用小数减大数时的情况,比如说800减去1000时,先把800换成0800,就是小数和大数先换成一样的位数,再去比较他们的字典序,然后接下来再赋值给int数组,借位什么的就简单了.
代码如下:
#include<iostream>
#include<cstring>
using namespace std;
char num_1[101],num_2[101],temp[101];
char num_1_new[101],num_2_new[101];
int Num_1[101],Num_2[101],Sum[101];
int max(int a,int b)
{
if (a>b){return a;}
return b;
}
int main(){
while(cin>>num_1>>num_2){
memset(Sum,0,sizeof(Sum));
memset(temp,'0',sizeof(temp));
memset(num_1_new,'0',sizeof(num_1_new));
memset(num_2_new,'0',sizeof(num_2_new));
int length_1 = strlen(num_1);
int length_2 = strlen(num_2);
int x=max(length_1,length_2);
if(length_2 >= length_1)
{
int x = length_2-length_1;
for(int i=length_2;i>=0;i--)
num_2_new[i] = num_2[i];
for(int j=length_1;j>=0;j--)
num_1_new[j+x] = num_1[j];
}
else if(length_1>length_2){
int x = length_1-length_2;
for(int i=length_1;i>=0;i--)
num_1_new[i] = num_1[i];
for(int j=length_2;j>=0;j--)
num_2_new[j+x] = num_2[j];
}
if(strcmp(num_1_new,num_2_new)<0){
strcpy(temp,num_1_new);
strcpy(num_1_new,num_2_new);
strcpy(num_2_new,temp);
cout<<"-";
}
for(int i=0;i<x;i++)
Num_1[x-i-1] = num_1_new[i]-48;
for(int i=0;i<x;i++)
Num_2[x-i-1] = num_2_new[i]-48;
for(int i=0;i<x;i++)
{
Sum[i] = Num_1[i]-Num_2[i];
if(Sum[i]<0)
{
Num_1[i+1] --;
Num_1[i]+=10;
Sum[i] = Num_1[i]-Num_2[i];
}
}
while(Sum[x]==0&&x>0){
x--;
}
for(int i=x;i>=0;i--)
cout<<Sum[i];
cout<<endl;
}
}