Professional Documents
Culture Documents
Sử dụng ifstream để đọc số các phép toán từ file sau đó thực hiện bằng vòng lặp để
tính toán.
Đầu tiên trong một dòng đọc số đầu tiên và lưu vào num1, đến khi gặp một char
không phải là số thì lưu vào một biến để nhớ phép toán (VD: bool cal; cal = 0 thì
cộng, cal = 1 thì nhân), sau đó tiếp tục đọc cho đến hết dòng.
Sau khi đã lưu hai số lớn vào num1 và num2, dựa vào kiểu phép toán lưu trong cal,
gọi hàm thành viên tương ứng để tính toán và dùng ofstream để ghi vào file.
B1: chuẩn hóa hai xâu a, b để có độ dài bằng nhau, nếu xâu nào có độ dài ngắn hơn thì
thêm ‘0’ vào đầu xâu đó
tách từng phần tử của hai xâu chuyển sang kiểu số và tính tổng
chuyển đổi giá trị tổng sang xâu kí tự rồi gán vào xâu kết quả
tổng= tổng-48
B3: Lưu ý cộng thêm giá trị nhớ lần cuối nếu nhớ khác ‘0’
B1: Chuẩn hóa hai xâu để có độ dài bằng nhau, thêm kí tự ‘ 0’ vào đầu xâu nào có chiều dài
nhỏ hơn để có hai xâu (num1 và num2) có độ dài bằng nhau.
Tạo xâu kết quả c = a, khởi tạo biến nhớ ban đầu =0;
Tách từng phần tử của xâu chuyển sang kiểu số và Tính hiệu:
hiệu = (num1[i]+48) –( num2[i] + 48 )- nhớ
Chuyển đổi giá trị hiệu tìm được sang xâu kí tự rồi gán vào kết quả
Xử lý xâu kết quả nếu xâu có độ dài lớn hơn 1 mà phần tử đầu tiên của mảng xâu là
‘0’
{
solon kq;
int bac=0;
if(sopt<p.sopt)
{
solon x;
x.sopt = sopt;
for(int i=0;i<sopt;i++)
x.so[i] = so[i];
sopt = p.sopt;
for(int i=0;i<sopt;i++)
so[i] = p.so[i];
p.sopt = x.sopt;
for(int i=0;i<p.sopt;i++)
p.so[i] = x.so[i];
}
bac=p.sopt;
int x = sopt;
solon *mang = new solon[bac];
// Mang so lon se cong don vao sau cac phep nhan voi tung chu
so
for(int i=0;i<bac;i++)
{
mang[i].sopt = x+1;
for(int j=0;j<x+1;j++)//gán cho tat ca cac mang bang 0
mang[i].so[j]=0;
x++;
}
int l=0; //xac dinh lam voi mang
nao
for(int j=0;j<p.sopt;j++)
{
int nho=0,g=0;
for(int k=0;k<sopt;k++)
{
mang[l].so[g+l] = (so[k]*p.so[j]+nho)%10;
nho = (so[k]*p.so[j]+nho)/10;
g++;
}
//het vong for neu con nho thi them mot phan tu nua
if(nho!=0)
{
mang[l].so[g+l]= nho;
}
else
{
mang[l].sopt = g+l;
}
l++;
}
for(int i=0;i<bac;i++)
{
int z= mang[bac-1].sopt - mang[i].sopt;
for(int j=1;j<=z;j++)
{
mang[i].so[mang[i].sopt-1+j]=0;
}
mang[i].sopt = mang[bac-1].sopt;
}
kq.sopt = mang[bac-1].sopt+1;
int nhokq=0;
//cong tat ca cac so trong mang
for(int i=0;i<mang[bac-1].sopt;i++)
{
int w=0;
for(int j=0;j<bac;j++)
{
w += mang[j].so[i];
}
kq.so[i] = (w+nhokq)%10;
nhokq = (w+nhokq)/10;
}
if(nhokq!=0)
{
kq.so[mang[bac-1].sopt] = nhokq;
}
else
kq.sopt = mang[bac-1].sopt;
return kq;
}