Cộng 2 số rất lớn

Đề bài : Cho 2 số rất lớn được biểu diễn như xâu kí tự.Nhiệm vụ của bạn là tìm tổng 2 số đó.Em làm bằng cách sử dụng vector:
B1:tìm số nào có độ dài lớn hơn,thêm số 0 vào số nhỏ hơn để có 2 số có độ dài bằng nhau
B2:cộng 2 số
Em làm nhưng cứ bị lỗi.Anh chị giúp em với ạ.Em cám ơn

#include<string.h>
#include<vector>
using namespace std;



void Init(char str[],vector<int> &v) {
	for(int i=0;i<strlen(str);i++) {
		v.push_back(str[i] - '0');
	}
}

void print(vector<int> v) {
	for(int i=0;i<v.size();i++) {
		cout<<v[i];
	}
}

void add(vector<int>v1, vector<int>v2, vector<int>&v3) {
	v3.clear();
	//tim ra so lon hon 
	int length=v1.size() > v2.size() ? v1.size() : v2.size();
	//gan so 0 vao so nho hon de 2 so cos do dai bang nhau
	v1.resize(length);
	v2.resize(length);
	int temp=0;
	int extra=0; // so du
	for(int i=length-1;i>=0;i--) {
		temp=v1[i] + v2[i] + extra;
		v3.push_back(temp%10);
		extra=temp/10;
	}
	if(extra>0) v3.push_back(extra);
}


int main() {
	char a[100];
	gets(a);
	char b[100];
	gets(b);
	vector <int> v1,v2,v3;
	Init(a,v1);
//	print(v1);
	Init(b,v2);
//	cout<<endl;
//	print(v2);
	add(v1,v2,v3);
	print(v3);
}
2 Likes

mình đề xuất pseudo code như sau:

nhập so_1, so_2;
đặt  memory = 0, ketqua = "", donvi_1 = 0, donvi_2 = 0, donvi_ketqua = 0, tong = 0;
lặp {
     nếu (so_1 hoặc so_2 đã cắt hết) và memory bằng 0 {
         trả về so_1 nối so_2 nối ketqua;
     }
     donvi_1 = cắt hàng đơn vị của so_1 hoặc trả về 0;
     donvi_2 = cắt hàng đơn vị của so_2 hoặc trả về 0;
     tong = donvi_1 + donvi_2 + memory;
     memory = cắt hàng chục của tong hoặc trả về 0;
     donvi_ketqua = cắt hàng đơn vị của tong;
     ketqua = donvi_ketqua nối ketqua;
}
5 Likes
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?