大数减法c++

avatar
作者
猴君
阅读量:1

这里写目录标题

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; } 

广告一刻

为您即时展示最新活动产品广告消息,让您随时掌握产品活动新动态!