• 一本通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;
    }

  • 相关阅读:
    为什么一个字节可以表示的有符号整数的范围是-128~+127?
    redis入门指南(一) ——简介及入门相关
    C Primer Plus(二)
    lua程序设计(一)
    证明:S = 1 + 1/2 + 1/4 + 1/8 + 1/16 + ·······,求证 S = 2
    C Primer Plus (一)
    C语言打印年历
    Spring IoC 自定义标签解析
    CentOS 7 Nacos 集群搭建
    CentOS 7 Zookeeper 和 Kafka 集群搭建
  • 原文地址:https://www.cnblogs.com/57xmz/p/12370768.html
Copyright © 2020-2023  润新知