zoukankan      html  css  js  c++  java
  • 一本通1169 高精度减法

    【题目描述】

    求两个大的正整数相减的差。

    【输入】

    共2行,第1行是被减数a,第2行是减数b(a > b)。每个大整数不超过200位,不会有多余的前导零。

    【输出】

    一行,即所求的差。

    【输入样例】

    9999999999999999999999999999999999999
    9999999999999
    

    【输出样例】

    9999999999999999999999990000000000000

    代码

    #include<iostream>
    #include<cstdio>
    #include<cmath>
    #include<cstring>
    #include<cstdlib>
    using namespace std;
    int main()
    {
    	int a[256],b[256],c[256],lena,lenb,lenc,i;
    	char a1[256],a2[256],n[256];
    	gets(a1);
    	gets(a2);
    	memset(a,0,sizeof(a));
    	memset(b,0,sizeof(b));
    	memset(c,0,sizeof(c));
    	lena=strlen(a1);
    	lenb=strlen(a2);//前面步骤和加法一样,不再赘述
    	if(lena<lenb||(lena==lenb&&strcmp(a1,a2)<0))
    	{
    	strcpy(n,a1);
    	strcpy(a1,a2);
    	strcpy(a2,n);
    	cout<<"-";这几行代码的意思就是,如果被减数小于减数,那么两个数的值交换,并且输出一个负号
    }
        for(i=0;i<lena;i++)
        {
        	a[lena-i]=a1[i]-48;
    	}
    	for(i=0;i<lenb;i++)
    	{
    		b[lenb-i]=a2[i]-48;
    	}//字符变成数字
    	i=1;
    	while(i<=lena||i<=lenb)//因为结果肯定小于其中的任意一个数,所以位数也要小于等于
    	{
    		if(a[i]<b[i])
    		{
    			a[i]+=10;
    			a[i+1]--;
    		}//如果对应的一位被减数比减数小,那么前面一位减1,本位加10,也就是借1当10
    		c[i]=a[i]-b[i];
    		i++;
    	}
    	lenc=i;
    	while((c[lenc]==0)&&(lenc>1))
    	lenc--;//如果有后缀0,就删掉
    	for(i=lenc;i>=1;i--)
    	cout<<c[i];
    	cout<<endl;
    	return 0;
    }

  • 相关阅读:
    java对象转json对象
    cas-client登录后报INVALID_PROXY_CALLBACK
    tomcat启动一闪而过,调试tomcat
    获取url中的参数
    cas 退出后跳转指定页面
    cas增加验证码
    spring security+cas(cas proxy配置)
    oracle 导入导出指定表
    Marshaller根据对象生成xml文件
    webpack学习笔记
  • 原文地址:https://www.cnblogs.com/57xmz/p/12370768.html
Copyright © 2011-2022 走看看