高精度减法
题目描述
输入两个正整数,输出第一个数减去第二个数的差,可能是整数,负数或0。
输入
输入文件只有两行,第一行一个整数x,第二行一个整数y。其中0<=x<=10200,0<=y<=10200
输出
输出文件有1行,第一个数减去第二个数的差。
高精度减法注意两点:
1.大数减小数
2.消除前导0
#include<stdio.h>
#include<string.h>
using namespace std;
char str1[260];
char str2[260];
int d1[260];
int d2[260];
int result[500];
int main()
{
scanf("%s",str1);
scanf("%s",str2);
int length;
int L1=strlen(str1);
int L2=strlen(str2);
length=L1;
bool fuhao=false;
if(L1>L2)
{
length=L1;
for(int i=L1-1;i>-1;i--)
{
d1[L1-1-i]=str1[i]-'0';
}
for(int i=L2-1;i>-1;i--)
{
d2[L2-1-i]=str2[i]-'0';
}
}
else if(L1<L2)
{
length=L2;
fuhao=true;
for(int i=L1-1;i>-1;i--)
{
d2[L1-1-i]=str1[i]-'0';
}
for(int i=L2-1;i>-1;i--)
{
d1[L2-1-i]=str2[i]-'0';
}
}
else
{
if(strcmp(str1,str2)>0)
{
for(int i=L1-1;i>-1;i--)
{
d1[L1-1-i]=str1[i]-'0';
}
for(int i=L2-1;i>-1;i--)
{
d2[L2-1-i]=str2[i]-'0';
}
}
else if(strcmp(str1,str2)<0)
{
fuhao=true;
for(int i=L1-1;i>-1;i--)
{
d2[L1-1-i]=str1[i]-'0';
}
for(int i=L2-1;i>-1;i--)
{
d1[L2-1-i]=str2[i]-'0';
}
}
else
{
printf("0\n");
return 0;
}
}
int temp=0;
for(int i=0;i<length;i++)
{
temp=d1[i]-d2[i];
if(temp<0)
{
temp+=10;
result[i+1]--;
}
result[i]=temp;
}
if(fuhao)
printf("-");
//注意这里消除前导0的方法 使用while循环 同时防止结果只有一位时无输出的情况
//不消除前导0就是错的
while(result[length-1]==0&&length>1)
length--;
for(int i=length-1;i>-1;i--)
{
printf("%d",result[i]);
}
return 0;
}
附别人链接
https://blog.csdn.net/qq_42695892/article/details/82530762