大数减法

大数减法

问题描述:

给你两个大数,输出,他们的差

输入:

输入n,有n组数,接下输入两个数

输出:

输出他们的差

输入样例:

3

88 5

2 999999999999

456786798787 4564564857921456645789789

输出样列:

83

-999999999997

-4564564857920999858991002

代码:

#include<iostream>  
using namespace std;  
string a,b; 
 
string  substr(string a,string b )                          
{ 
  int  i,j,k,c,s,flag=1; 
string s1,s2;
	if(a.size()<b.size()||a.size()==b.size()&&a.compare(b)<0)
	 {
 		s1=a;
 		a=b;
 		b=s1;
 		flag=0;
 	}
  
   while (a.length()-1>b.length()-1)  b='0'+b;               //字符短的加前导零,使他们一样长   
   
    for (i=a.length()-1; i>=0; i--)        //减,规整 
    { 
      
	if(a[i]>=b[i])
 
		a[i]=a[i]-b[i];
	else 
	{
		a[i]=a[i]-b[i];        
		c=(a[i]*(-1)/10)+1;
		a[i]=a[i]+c*10;
		a[i-1]=a[i-1]-c;
	} 
    }
	for(i=0;i<a.length();i++)       // 去零 
    if(a[i]=='0');
    else break;
    for(j=i,k=0;j<a.length();j++,k++)    //转化字符 
    a[k]=a[j]+48;
   if(flag)
   {
   	 s2=a;
   }
 else 
 {
 	s2="-";
 	s2+=a;
 } 
 return s2;
}  
int main()  
{  int cas;
cin>>cas;
while(cas--)
{
	 cin>>a;  
     cin>>b ;
	   
      cout<<substr(a,b)<<endl;  
     
}
   return 0;
}  


 

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值