Một cách nhân độc đáo (Phần 2)
Đây là đoạn code do Nhung viết lên, mọi người xem thử nhé.
#include<iostream.h>
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define max 100
/****/
void xuatfile(char *fn);
void docfile(char *fn,int *&a,int *&b,int &n,int &m);
void nhan(char *fn,int *&a,int *&b,int **&mt,int n,int m);
void ghifile(char *fn,int *&a,int n);
/****/
void main()
{
char *fn="bignum_in.txt";
char *fm="bignum_out.txt";
int *a=new int[max],*b=new int[max];// ab co toi da 100 chu so
int n=0,m=0;//la so chu so cua a,b doc tu file,khoi tao =0
docfile(fn,a,b,n,m);
//tao ma ram luu ket qua nhan tung chu so cua voi b
int **mt;
mt=new int *[n];
for(int i=0;i<n;i++)
mt[i]=new int [m];
nhan(fm,a,b,mt,n,m);
//thu hoi mang dong
delete a;
delete b;
for(i=0;i<m;i++)
delete []mt[i];
delete[]mt;
//xuat ket qua
xuatfile(fm);
}
/****/
void xuatfile(char *fn)
{
FILE *f;
char x;
f=fopen(fn,"r");
while(fscanf(f,"%c",&x)&&!feof(f))
cout<<x;
fclose(f);
}
void docfile(char *fn,int *&a,int *&b,int &n,int &m)
{
FILE *f;
f=fopen(fn,"r");
char x;
int i=0,j=0;
while(fscanf(f,"%c",&x)&&!feof(f))
{
if(x=='n')
while(fscanf(f,"%c",&x)&&!feof(f))
b[j++]=x-'0';
else
a[i++]=x-'0';
}
n=i;
m=j;
fclose(f);
}
void ghifile(char *fn,int *&a,int n)
{
FILE *f;
f=fopen(fn,"w");
char ch;
int i=n-1;
while(i>0&&a[i]==0)
i--;
for(;i>=0;i--)
{
ch=a[i]+'0';
fprintf(f,"%c",ch);
}
fclose(f);
}
void nhan(char *fn,int *&a,int *&b,int **&mt,int n,int m)
{
//mang kq luu ket qua tam thoi
int *kq=new int[n*m];
int k=0,i,j;
for(i=0;i<n;i++)
for(j=0;j<m;j++)
mt[i][j]=a[i]*b[j];
//xu ly ma tran
kq[k++]=mt[n-1][m-1];
i=n-1;
for(j=m-2;j>=0;j--)
{
int a=i,b=j;
kq[k]=0;
while(a>=0&&b<m)
{
kq[k]=kq[k]+mt[a][b];
a--;
b++;
}
k++;
}
if(j<0)
i--;
for(;i>0;i--)
{
int a;
kq[k]=0;
if(j=m-1&&i<=0)
m=m-1;
for(a=i,j=0;a>=0&&j<m;a--,j++)
kq[k]=kq[k]+mt[a][j];
k++;
}
kq[k]=mt[0][0];
k++;
//xu ly mang
int nho=0;
for(i=0;i<k;i++)
{
int t;
t=kq[i]+nho;
nho=t/10;
kq[i]=t%10;
}
if(nho!=0)
kq[k++]=nho;
//ghi ket qua vao file
ghifile(fn,kq,k);
}
Đã hơn 1 năm trôi qua, mọi thứ đều thay đổi, nhưng có lẽ trong lòng mình vẫn còn thích bạn đấy Nhung. Bạn là người gây ra cho T nhiều chuyện bực tức nhưng cũng là người T vẫn luôn cố gắng vượt qua. Nhờ có bạn mà năm 2 mình học tốt khá nhiều. Mình luôn có ý tưởng sáng tạo từ bạn và Nỡ.
Trả lờiXóaLuôn mong ước có 1 sự thay đổi nhưng có lẽ nó khó có thể xảy ra. Mình chắc chắn như vậy. Dù sao cũng rất vui vì làm quen với bạn.