• 【高精度】大整数减法


    题目相关

    【题目描述】

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

    【输入】

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

    【输出】

    一行,即所求的差。

    【输入样例】

    9999999999999999999999999999999999999

    9999999999999

    【输出样例】

    9999999999999999999999990000000000000

    分析

    本题考察的是高精度减法。我们可以模拟减法的竖式计算过程从而实现高精度的计算。

    和高精度加法一样,也是使用字符串来进行输入、存储。竖式计算时,也是低位对齐,从低位向高位进行计算的,所以可以通过倒序转换数字的方式实现简便操作。

    计算过程中需要注意借位操作。向高位借一位,自身加十,高位减一。最后再倒序进行输出。

    代码实现

    #include <iostream>
    #include <cstring>
    using namespace std;
    /*
    1. 输入、存储 大整数  
    
    2. 计算 模拟竖式计算
    低位对齐  倒序处理  转换 
    */
    int main(){
    	char s1[205]={0},s2[205]={0};
    	int n1[205]={0},n2[205]={0}; 
    	cin>>s1>>s2;
    	 
    	//倒序 
    	int l1=strlen(s1);
    	int l2=strlen(s2);
    	
    	for(int i=0;i<l1;i++){
    		n1[i]=s1[l1-i-1]-'0';
    	}
    	for(int i=0;i<l2;i++){
    		n2[i]=s2[l2-i-1]-'0';
    	}
    	
    	for(int i=0;i<l1;i++){
    		if(n1[i]<n2[i]){
    			n1[i+1]--;
    			n1[i]+=10;
    		}
    		n1[i]=n1[i]-n2[i];
    	}
    	//输出
    	int flag=0;
    	for(int i=l1;i>=0;i--){
    		if(n1[i]!=0||i==0) flag=1;
    		if(flag==1)
    			cout<<n1[i];
    	}
    	return 0;
    }
    

    视频链接

    链接

    源码

    源码上传至Gitee仓库中,欢迎star!
    Fork me on Gitee
    Fork me on Gitee

    不积硅步,无以至千里。
  • 相关阅读:
    记一次线上网络问题排查
    记服务器上session设置引起的OutofMemory
    由DateFormat引起的线程安全问题
    十二周总结
    团队开发冲刺第十天
    团队开发冲刺第九天
    团队开发冲刺第八天
    团队开发冲刺第七天
    十二周总结
    团队开发冲刺第六天
  • 原文地址:https://www.cnblogs.com/wyloving/p/14166180.html
Copyright © 2020-2023  润新知