zoukankan      html  css  js  c++  java
  • 《信息学奥赛一本通》 高精度减法。输入两个正整数,求它们的差。

    算法分析

    类似加法,可以用竖式求减法。在做减法运算是,需要注意的是:被减数必须大于减数,同时需要处理借位。

    代码如下:

    #include <iostream>
    #include <cstdio>
    #include <cstring>
    using namespace std;
    int main ()
    {
     int a[256],b[256],c[256],lena,lenb,lenc,i;
     char n[256],n1[256],n2[256];
     memset(a,0,sizeof(a));
     memset(b,0,sizeof(b));
     memset(c,0,sizeof(c));
     gets(n1);
     gets(n2);
     //输入被减数和被减数
     if(strlen(n1)<strlen(n2)||(strlen(n1)==strlen(n2)&&strcmp(n1,n2)<0))
     {
      //strcmp()为字符串比较函数,当n1==n2时,返回0;当n1>n2时,返回正整数;当n1<n2时,返回负整数。
      //处理被减数和减数,交换被减数和减数
      strcpy(n,n1);
      strcpy(n1,n2);
      strcpy(n2,n);
      cout<<"-";
      //交换了减数和被减数,结果为负数。
     }
     lena=strlen(n1);
     lenb=strlen(n2);
     for(i=0;i<=lena-1;i++)
     {//被减数放入a数组
      a[lena-i]=int(n1[i]-'0');
     }
     for(i=0;i<=lena-1;i++)
     {//减数放入b数组
      b[lena-i]=int(n2[i]-'0');
     }
     i=1;
     while(i<=lena||i<=lenb)
     {
      if(a[i]<b[i])
      {//不够减,那么向高位借1当10
       a[i]+=10;
       a[i+1]--;
      }
      c[i]=a[i]-b[i];
      i++;
     }
     lenc=i;
     while((c[lenc]==0)&&(lenc>1))
     {//最高位的0不输出
      lenc--;
     }
     for(i=lenc;i>=1;i--)
     {//输出结果
      cout<<c[i];
     }
     cout<<endl;
     return 0;
    }
    

    升级版代码

    #include <iostream>
    #include <cstdio>
    #include <cstring>
    using namespace std;
    int main ()
    {
    	int a[256],b[256],c[256],lena,lenb,lenc,i;
     	char n[256],n1[256],n2[256];
    	memset(a,0,sizeof(a));
    	memset(b,0,sizeof(b));
    	memset(c,0,sizeof(c));
    	cin>>n1>>n2;
    	lena=strlen(n1);
    	lenb=strlen(n2);
    	if(lena<lenb||(lena==lenb&&strcmp(n1,n2)<0))
    	{
    		strcpy(n,n1);
    		strcpy(n1,n2);
    		strcpy(n2,n);
    		cout<<"-";
    	}
    	lena=strlen(n1);
    	lenb=strlen(n2);
    	for(i=0;i<=lena-1;i++)a[lena-i]=n1[i]-'0';
    	for(i=0;i<=lenb-1;i++)b[lenb-i]=n2[i]-'0';
    	i=1;
    	while(i<=lena||i<=lenb)
    	{
    		if(a[i]<b[i])
    		{
    			a[i]+=10;
    			a[i+1]--;
    		}
    		c[i]=a[i]-b[i];
    		i++;
    	}
    	lenc=i;
    	bool temp=true;
    	for(i=lenc;i>=1;i--)
    	{
    		if(c[i]==0&&temp==true)continue;
    		else temp=false;
    		cout<<c[i];
    	}
    	cout<<endl;
    	return 0;
    }
    
  • 相关阅读:
    软件测试的术语及解释总结
    测试工具
    数据库客户端连接
    应用程序发生错误怎么修改
    软件测试容易忽略的缺陷
    LR中错误解决方法
    LR结果分析2
    LR结果分析
    Hive
    zookeeper
  • 原文地址:https://www.cnblogs.com/AlexKing007/p/12339606.html
Copyright © 2011-2022 走看看