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

  • 相关阅读:
    maven使用杂记
    Gradle中的SourceSet理解
    CyclicBarrier正确的使用方法和错误的使用方法
    jstack 结果查看
    java1.8中ConcurrentHashMap
    grub2配置关键(三个核心变量prefix、root、cmdpath)和几点疑问
    关于docker的理解随记
    docker中的命令参数(小白常用)
    tmux快捷键汇总(常用)
    archlinux安装gnome的一些坑随记
  • 原文地址:https://www.cnblogs.com/57xmz/p/12370768.html
Copyright © 2020-2023  润新知