作业介绍

高精度加法

#include<iostream>
#include<cstring>

using namespace std;


int main(){
	// 1、获取高精度数:字符数组 & 字符串
	char a1[505], b1[505];
	int a[505]={}, b[505]={}, c[505]={};
	cin>>a1>>b1;
	int lena = strlen(a1);
	int lenb = strlen(b1);
	int lenc = max(lena, lenb);
	// 2、把字符数字变成整型的数组,并且倒序存储
	// 倒序数组a
	for(int i=0;i<lena;i++){
		a[i] = a1[lena-1-i]-'0';
	}
	// 倒序数组b
	for(int i=0;i<lenb;i++){
		b[i] = b1[lenb-1-i]-'0';
	}
	// 3、对位相加
	int x = 0;   // 记录进位情况
	for(int i=0;i<lenc;i++){
		// a + b = c 
		c[i] = a[i] + b[i] + x;
		x = c[i]/10;  // 计算进位情况 
		c[i] %= 10;   // 进位完了只剩个位
	} 
	// 判断最高位是否产生进位
	if(x == 1) c[lenc++] = x;
	// 倒序输出结果
	return 0;
}

高精度减法

#include<iostream>
using namespace std;

// a > b  =>      a - b
// a < b  =>   - (b - a)

// a>=b为真  否则为假 
bool cmp(string a, string b){
	int lena = a.length();
	int lenb = b.length();
	if(lena != lenb) return lena > lenb;
	
	for(int i=0;i<lena;i++){
		if(a[i] != b[i]) return a[i]>b[i]; 
	}
	return 1;
}
int a[10090]={},b[10090]={},c[10090]={};
int main(){
	// 1、获取高精度数:字符数组 & 字符串
	string a1, b1;
	cin>>a1>>b1;
	// 1.1、字符串大小比较的函数
	if(cmp(a1,b1)==0){
		cout<<"-";  // a1 - b1 < 0
		// 交换a1 和 b1,达到始终是a1-b1的效果
		string t = a1; a1 = b1; b1 = t;
	}
	// 2、把字符数字变成整型的数组,并且倒序存储
	int lena = a1.length();  // 被减数a1的长度
	int lenb = b1.length();  // 减数b1的长度
	int lenc = lena;
	for(int i=0;i<lena;i++){
		a[i] = a1[lena-1-i]-'0';
	}
	for(int i=0;i<lenb;i++){
		b[i] = b1[lenb-1-i]-'0';
	}
	// 3、减法
	for(int i=0;i<lenc;i++){
		c[i] = a[i] - b[i];
		if(c[i]<0){
			c[i] += 10;
			a[i+1]--;
		}
	}
	// 去除多余的前导0
	while(c[lenc-1]==0 && lenc>1) lenc--;
	// 倒序输出结果
	for(int i=lenc-1;i>=0;i--){
		cout<<c[i];
	}
	return 0; 
}

状态
已结束
题目
3
开始时间
2024-4-6 15:30
截止时间
2024-5-5 23:59
可延期
24 小时