`

大整数减法

 
阅读更多
#include "StdAfx.h"
#include "subStr.h"
#include<iostream>
using namespace std;

#define MAX_LENTH 201


void sub(int len,int *bigNumA,int *bigNumB){
//以下为执行逐位相减;tag记录进位
		int i,tag=0;
		for(i=0;i<len;i++){
			bigNumA[i]-=bigNumB[i];
			if(tag){
				bigNumA[i]--;
				tag=0;
			}
			if(bigNumA[i]<0){
				tag=1;
				bigNumA[i]+=10;
			}
		}
		//以下为处理结果的办法,若bigNumA<bigNumB则tag==1。所以不单要输出负号,还要修改结果。
		//修改结果的思想:32-58(等于-26),但是用32-58的竖式是这样的个位为4,十位为7,而且还借了百位1位。
		//所以9-7==2,10-4==6,加上负号就是正确的结果:-26
		if(tag) 
		{
			printf("-");
			for(i=len-1;i>0;i--){
			printf("%d",(9-bigNumA[i]));
			}
			printf("%d\n",(10-bigNumA[0]));
		}else{
			for(i=len-1;i>=0;i--){
				printf("%d",bigNumA[i]);
			}
			printf("\n");
		}
}
int main(){
	char numA[MAX_LENTH],numB[MAX_LENTH];
	int bigNumA[MAX_LENTH],bigNumB[MAX_LENTH];
	int i,pos,len;
	while(scanf("%s %s",numA,numB)!=EOF){

		//注意两点,memset第三个参数是字节数,不能用strlen(bigNumA)。例如:
		//memset(bigNumA,0,strlen(bigNumA))是错误的。
		//bigNumA[MAX_LENTH]={0}这种将数组元素统一置为0的方式只有在声明的时候才能使用。
		//以下的“//”解开后是会出错的。
		memset(bigNumA,0,sizeof(bigNumA));
		memset(bigNumB,0,sizeof(bigNumB));
		//bigNumA[MAX_LENTH]={0};
		//bigNumB[MAX_LENTH]={0};

		//以下是将接收到的大整数numA和numB存储到bigNumA和bigNumB中,个位对应bigNumx[0],以此类推。

		pos=0;
		for(i=strlen(numA)-1;i>=0;i--){
			bigNumA[pos++]=numA[i]-'0';
		}
		pos=0;
		for(i=strlen(numB)-1;i>=0;i--){
			bigNumB[pos++]=numB[i]-'0';
		}

		if(strlen(numA)>strlen(numB))
		{
			len=strlen(numA);
		}else{
			len=strlen(numB);
		}
		sub(len,bigNumA,bigNumB);
	}
	system("pause");
	return 0;
}

 

分享到:
评论

相关推荐

    C语言--大整数减法

    C语言大整数减法 C语言中大整数减法是指对两个大整数进行减法运算,以获取它们之间的差值。由于C语言中整数类型的限制,无法直接对大整数进行减法运算,因此需要使用数组来实现大整数的减法。 在给定的代码中,...

    大整数减法 c++ 代码

    大整数减法 c++ 代码 大整数减法 c++ 代码 大整数减法 c++ 代码大整数减法 c++ 代码 大整数减法 c++ 代码 大整数减法 c++ 代码 大整数减法 c++ 代码

    大整数减法 减法 运算

    ### 大整数减法运算知识点解析 在计算机科学领域,大整数处理是一个非常重要的概念,尤其是在密码学、高性能计算以及其他需要精确处理极大数值的应用场景中。传统的整数类型(如`int`, `long long`等)由于其固定...

    55、1169:大整数减法+书画相关链接(十九)-2020-01-19(A).pdf

    1. 大整数减法的原理和实现方法: 文件描述了如何进行高精度减法的算法分析与编程实现。高精度减法是在计算机科学中,处理超出常规数据类型范围的整数减法问题。这在某些场景下尤为重要,比如在金融、密码学等领域。...

    算法-大整数减法(信息学奥赛一本通-T1169)(包含源程序).rar

    《算法-大整数减法(信息学奥赛一本通-T1169)》是针对信息学竞赛中常见的一类问题进行详细讲解的资源,其中包含了相关的源代码,可以帮助学习者深入理解大整数减法的实现。在这个主题中,我们将探讨大整数减法的...

    C语言大整数的加减法运算

    #### 大整数减法 大整数的减法同样需要注意借位的问题。具体的实现步骤如下: 1. **初始化变量**:与加法相同,定义相应的字符串和数组变量。 2. **比较大小**:首先需要确定哪个数较大。如果被减数小于减数,则...

    大整数加减法C/C++源代码

    文件提供了大整数加减法源代码,已在visual C++2.0上编译通过

    大整数加减法

    普通的计算器在进行大整数的加减法时,可能会因为越界而丢掉后面的数。而该算法可实现两个大整数的加减法运算,能解决以上出现的问题。

    大整数加减法C++源代码

    c++大整数加减法的源代码,使用链表完成,希望对大家有用啊

    C++编写大整数加减法,乘法

    Visual C++环境下,这些操作可以通过编译和调试这些源文件(如`大整数加法.cpp`、`大整数减法.cpp`、`2389Bull Math(高精度乘法).cpp`)来验证其正确性。同时,为了提高性能,可以考虑使用已有的库,如GMP(GNU ...

    大整数减法-c语言-基础

    无任何高级语法,基础为主。作者刚写完,未进行整理,写的不好的地方多多担待

    C++实现的大整数加减乘除

    C++实现的大整数加减乘法,已经测试了,并且在oj平台上测试通过

    超大整数相减

    ### 超大整数相减的Java实现 在计算机科学中,处理超大整数是常见的需求之一,尤其是在加密算法、金融计算等场景中。本文将基于提供的代码示例来详细解析如何用Java实现超大整数相减的功能。 #### 一、问题背景与...

    大整数运算库 大整数四则运算,加减乘除开平方

    2. **大整数减法**:减法与加法类似,只是需要考虑借位的情况。如果被减数小于减数,可能需要向高位借位,这可能会导致最高位变负,因此需要特殊处理。 3. **大整数乘法**:乘法通常使用Karatsuba或Toom-Cook算法,...

    封装求大整数的相关操作

    3. **大整数减法**:减法与加法类似,但需要注意借位操作。如果当前位不够减,需要向前一位借位。处理借位时可能涉及负数,因此需要额外处理。 4. **大整数乘法**:乘法可以使用分治法来实现,例如Karatsuba算法或...

    利用链表进行大整数运算

    2. **大整数减法**:减法操作类似,但需要考虑借位。如果被减数的某位小于减数的对应位,就需要向前一位借位。例如,减法 `9123 - 5678` 可以转化为 `1923 - 5678`,然后用同样的方法逐位相减。 3. **大整数乘法**...

    C语言:超长正整数的减法

    问题描述】 编写程序实现两个超长正整数(每个最长80位数字)的减法运算。 【输入形式】 从键盘读入两个整数,要考虑输入高位可能为0的情况(如00083)。...进行两个正整数减法运算, 234098 -134

    大整数运算

    大整数减法相对加法稍复杂,因为需要处理借位的情况。其基本流程与加法类似,但需额外考虑借位逻辑: 1. **初始化与转换**:与加法相同,读入并转换两个大整数。 2. **判断符号**:如果被减数小于减数,需要交换两...

    大整数问题

    - `jianbigint`函数实现了大整数减法。它首先比较两个大整数的长度,然后逐位相减,并处理可能的借位。 - `addbigint`函数实现了大整数加法。同样,先比较长度,然后逐位相加,并处理进位。 - `chengbigint`函数...

Global site tag (gtag.js) - Google Analytics