C++高精度减法

C++高精度减法

题目描述
洛谷编号:2142
高精度减法。
输入输出格式
输入格式:
两个整数a,b(第二个可能比第一个大)。
输出格式:
结果(是负数要输出负号)。
输入输出样例
输入样例1:
2
1
输出样例1:

1

数据规模与约定
20%数据a,b在long long范围内
100%数据0<a,b<=10的10000次方

这个程序主要使用数组解决长整型不能存储的问题
程序如下

#include<bits/stdc++.h>
using namespace std;
int main()
{
    char a[100010],b[100010];
    	cin>>a>>b;
    
    int c[100010],d[100010],jg[100010];
	int n1,n2;
	int i;
	int f=0,l=0;
    n1=strlen(a);
    n2=strlen(b);
    for(i=0;i<n1/2;i++){
    	
		swap(a[i],a[n1-1-i]);
	}
    for(i=0;i<n2/2;i++){
    	
		swap(b[i],b[n2-1-i]);
	}
    for(i=0;i<n1;i++){
    	
		c[i]=a[i]-'0';
	} 
    for(i=0;i<n2;i++){
    	
		d[i]=b[i]-'0';
	}
    if(n2>n1)
    {
        for(i=0;i<n2;i++){
        	
			swap(c[i],d[i]);
		} 
    }
    if(n1>n2){
    	
		swap(n1,n2);
	}
    for(i=0;i<n2;i++){
    	
	jg[i]=c[i]-d[i]; 
	} 
    for(i=0;i<n2;i++)
    {
         if(jg[i]<0)
         { 
             jg[i]=10+jg[i];
             jg[i+1]--; 
         } 
    }
    if(f==1){
    	
		cout<<"-"; 
	}
    for(i=n2-1;i>=0;i--)
    {
         if(l==0)
         {
             if(jg[i]!=0) 
             {
                 l=1;
                 cout<<jg[i];
                 continue;
             } 
         }
         if(l!=0) 
         {
             cout<<jg[i];
         }
    }
}

版权声明:本文为weixin_44063933原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。