高精度的减法

一,着力点:负数

思想:模板的套用变化

交换数组的内容;

二,方法:交换的方法

字符型数组的交换——strcmp;

三,布尔判断特大字符串的数

思路:先判断长度然后判断大小

	bool compare(char str1[],char str2[])
	{
		if(strlen(str1)!=strlen(str2))return strlen(str1)>strlen(str2);
		for(int i=0;i<strlen(str1);i++)
		{
			if(str1[i]!=str2[i])return str1[i]>str2[i];
		}
		return true;
	}

四,核心代码

for(int i=1;i<=lenc;i++)
	{
		if(a[i]-b[i]<0)
		{
			a[i]+=10;
			a[i+1]--;
		}
		c[i]=a[i]-b[i];
	}

五,扫零操作

while(c[lenc]==0&&lc>1)lc--

0000000001;012;00000034;这种数都是不太需要的;

板块二:常见的错误

函数的声明:bool cmp(str1[ ],str2[ ])是不可以的

要说明bool cmp(char str1[],char str2[])

数组的定义

位置:如果有调用的必要比如递归和模拟的话是必须要写到外面的,一方面可以不用写参数;一反面数组干净没有杂质。

转存的错误

char转到int 中的错误

正常的做法

	int lena=strlen(str1);
	int lenb=strlen(str2);
	for(int i=0;i<lena;i++)
	a[lena-i]=str1[i]-'0';//
	for(int i=0;i<lenb;i++)
	b[lenb-i]=str2[i]-'0';

错误的写法 漏掉了-‘0’

int lena=strlen(str1);
	int lenb=strlen(str2);
	for(int i=0;i<lena;i++)
	a[lena-i]=str1[i];//
	for(int i=0;i<lenb;i++)
	b[lenb-i]=str2[i];

特大奇葩问题——if中有&&‘=’直接给我变成赋值操作了,不报错了!!!!!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
题目需要实现高精度减法运算,计算a减去b的结果。假设a和b都是非负整数,且位数不超过240位。 高精度减法的思路是从个位开始逐位相减,如果当前位被减数小于减数,则向高位借位。具体步骤如下: 1. 将a和b转化为字符串,分别保存在字符串变量a_str和b_str中。 2. 创建一个空的列表result,用于保存计算结果。 3. 初始化两个指针i和j,分别指向a_str和b_str的最右边(即个位)。 4. 定义一个变量carry,用于记录借位情况,初始化为0。 5. 从个位开始,依次取a_str和b_str的当前位,并将其转化为整数类型。如果b_str的当前位大于a_str的当前位,则从高位借位。具体步骤如下: - 如果b_str的当前位大于a_str的当前位,则将当前位的借位设置为10并将carry设置为1。 - 否则,将借位设置为0,carry设置为0。 6. 将a_str和b_str的当前位数相减,再加上借位,得到当前位的减法结果。 7. 将减法结果转化为字符串,并添加到result列表的最左边。 8. 继续向前移动指针i和j,直到两个字符串遍历完。 9. 将result列表中的所有字符串拼接成一个字符串。 10. 返回最终减法结果。 下面是Python代码实现: ```python def high_precision_subtraction(a, b): a_str = str(a) b_str = str(b) result = [] i = len(a_str) - 1 j = len(b_str) - 1 carry = 0 while i >= 0 or j >= 0: digit_a = int(a_str[i]) if i >= 0 else 0 digit_b = int(b_str[j]) if j >= 0 else 0 if digit_b > digit_a: digit_a += 10 carry = 1 else: carry = 0 subtraction_result = digit_a - digit_b + carry result.insert(0, str(subtraction_result)) i -= 1 j -= 1 return ''.join(result) ``` 通过调用`high_precision_subtraction(a, b)`函数,我们可以得到高精度减法的结果。请注意,输入的a和b应该是整数类型。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值