大数减法c++

这里写目录标题

key

在这里插入图片描述

  • 检查减数和被减数的大小,大的放前,小的放后
  • 确定结果是正数,还是负数,即符号位
  • 从低位开始减
  • 如果a[i]<b[i],则向高位借1当10,a[i+1]–;a[i]+=10
#include <iostream>
#include<cstring>
using namespace std;
//比较两串大小,如果后面大,则flag=1 
void whoisbig(int a[],int b[],int* flag){
	if(a[0]<b[0]){
		*flag=1;
	} 
	if(a[0]==b[0]){
		int i=a[0];
		while(i>0){
			if(a[i]<b[i]){
				*flag=1;
				break;
			} 
			--i; 
		}
	}
	
}
void a_i(char* a,int * b){
	b[0]=strlen(a);
	for(int i=b[0];i>0;--i){
		b[b[0]-i+1]=a[i-1]-'0';
	}
} 
int main(){
	char s1[10090],s2[10090];
	int* p,*q;
	int a[10090],b[10090],c[10090];
	int flag=0;
	scanf("%s",s1);
	scanf("%s",s2);
	a_i(s1,a);
	a_i(s2,b);
	p=a;
	q=b;
	whoisbig(p,q,&flag);//判断p与q的大小,如果被减数小,则交换 
	if(flag==1){
		p=b;
		q=a;
	}
	c[0]=max(a[0],b[0]);
	for(int i=1;i<=c[0];i++){
		c[i]=p[i]-q[i];
		if(p[i]<q[i]){
			c[i]+=10;
			p[i+1]--;
		}
	}
	while(c[c[0]]==0 && c[0]>1) c[0]-=1;
	if(flag==1)
		cout<<"-";
	for(int i= c[0];i>0;--i)
		printf("%d",c[i]);
	return 0;
}

相关推荐

  1. 高精度减法C++)

    2024-07-19 06:00:02       24 阅读
  2. C语言:高精度减法

    2024-07-19 06:00:02       68 阅读
  3. X进制减法(贪心算法C++实现)

    2024-07-19 06:00:02       37 阅读
  4. 蓝桥杯/减肥/c\c++

    2024-07-19 06:00:02       28 阅读
  5. C程序训练:大数相乘与阶乘的计算

    2024-07-19 06:00:02       60 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-19 06:00:02       66 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-19 06:00:02       70 阅读
  3. 在Django里面运行非项目文件

    2024-07-19 06:00:02       57 阅读
  4. Python语言-面向对象

    2024-07-19 06:00:02       68 阅读

热门阅读

  1. Vue 3路由详解:从基础配置到高级技巧

    2024-07-19 06:00:02       20 阅读
  2. MQTT 固定报头中的剩余长度介绍

    2024-07-19 06:00:02       21 阅读
  3. uniapp自定义tabBar

    2024-07-19 06:00:02       21 阅读
  4. Redis

    2024-07-19 06:00:02       14 阅读
  5. 构建RSS订阅机器人:观察者模式的实践与创新

    2024-07-19 06:00:02       20 阅读
  6. 手机日历如何与Outlook同步

    2024-07-19 06:00:02       21 阅读
  7. IPython:提升Python编程体验的魔法工具

    2024-07-19 06:00:02       15 阅读