1. Trang chủ
  2. » Công Nghệ Thông Tin

Mã nguồn chương trình xử lí các phép toán trên số nguyên lớn

7 712 4

Đang tải... (xem toàn văn)

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 7
Dung lượng 12,87 KB

Nội dung

Xử lý số nguyên lớn là một kỹ năng không thế thiếu của một thí sinh tham gia kỳ thi HSGQG. Bài toán thường liên quan tới việc cộngtrừnhân với các số nguyên có nhiều (khoảng vài trăm, vài nghìn) chữ số. Bài viết này xin được cung cấp cho các bạn cách thực hiện các phép toán với số nguyên lớn. 1 Ý tưởng: Chúng ta sẽ thực hiện các phép toán này như cách làm mà hồi cấp 1 đã được học. Đó là thực hiện các phép toán lần lượt từ phải qua trái và sử dụng thêm một biến “nhớ”. 2 Khai báo: Các phép toán sẽ được thực hiện trên mảng, do đó ta cần xây dựng mảng 1 chiều có kích thước là số chữ số tối đa của bài toán. Mỗi phần tử của mảng sẽ là 1 chữ số. Ngoài ra, cần khai báo biến base là hệ cơ số mà chúng ta dùng khi thực hiện các phép toán. Trong ví dụ này, tôi đặt base = 10 để thỏa mãn mỗi phần tử chỉ chứa 1 chữ số. Const maxn = 100; Số chữ số tối đa base = 10; Hệ cơ số khi sử dụng Type BigNum = array0..maxn of LongInt; Kiểu số nguyên lớn 3 Phép cộng: Function Plus(x , y : BigNum) : BigNum; Kết quả là số nguyên lớn var i , nho : LongInt; begin Fillchar(Plus , SizeOf(Plus) , 0); Khởi gán Plus = 0 nho := 0; Khởi gán nho = 0 For i := maxn downto 1 do Cộng lần lượt từng chữ số từ phải qua trái begin Plusi := xi + yi + nho; Công thức cộng như cấp 1 nho := Plusi div base; Tính lại biến nho cho lần cộng tiếp theo Plusi := Plusi mod base; Đảm bảo mỗi phần tử chỉ lưu một chữ số....

Trang 1

#include<conio.h>

#include<string.h>

int n1,n2,daul ,dau2; int s1[21],s2[21]; char son[21],sobn[21]; void nhan();

void nhan(void)

{

int nho,bac,tich,i,j;

int tong[50]={0};

int tg[50]={0};

int nmax,ntg;

bac=1;

tich=1;

nho=0;

nmax=0;

//hoan dot phan tu mang

for (j=0;j<=n2;j++)

tg[n2-j]=s2[j];

for (j=0;j<=n2;j++)

s2[j]=tg[j];

for (j=0;j<=nl;j+=)

tg[nl-j]=s1[j];

for (j=0;j<=n1;j++)

s1[j]=tg[j];

//Nhan hai so

for (j=0;j<=n2;j++)

{

bac=j;

Trang 2

for (i=0;i<=n1;i++)

{

tich =s1[i]*s2[j]+nho;

tg[i+bac] = tich% 10;

nho =tich/10;

}

ntg = n1+bac;

while (nho)

{

ntg;

tg[ntg] = nho%10;

nho = nho/10;

}

for(i=bac;i>=0;i ) printf(” ”);

gotoxy(50-ntg,wherey());

for(i=ntg;i>=bac;i++) printf("%d”,tg[i]); printf("\n");

for(i=bac;i<=ntg;i++)

{

tong[i] +=ig[i]+nho;

nho=tong[i]/10;

tong[i] %= 10;

}

while(nho)

{

ntg++;

tong[ntg]=tong[ntg]+nho%10; nho=nho/10;

}

Trang 3

if(ntg>nmax) nmax=ntg;

}

//mo ta nhan tay

gotoxy(49-nmax,wherey());

for(i=ntg+1;i>=0;i ) printf("-");

printf(”\n”);

gotoxy(50-ntg,wherey());

if(dau1*dau2<0)

{

gotoxy(50-nmax),wherey());

printf("-");

for(i=nmax;i>=0;i ) printf("%d",tong[i]);

}

e1se

{

gotoxy(49 —nmax,wherey()); printf(”—");

for(i=ninax;i>=0;i ) printf("%d",tong[i]);

}

}

void main()

{

int i,dem,1en1,1en2; char ch;

tt:

clrscr();

printf("\n CHUONG TRINH NHAP VA TINH HAI SO NGUYEN LON"); printf("\n\n *************************");

i=0;

dem=0;

Trang 4

printf(”\n\nSo Thu 1: ");fflush(stdin); do

{

ch=getch();

if(ch>='0'&&ch<='9'&&i<20) {

if(dem==0)

dau1=1;

dem++;

son[1]=ch;

printf("%c",ch);

s1[i]=son[i]-48;

if(s1[0]==0) continue; i++;

}

lenl =strlen(son);

n1=(i-l);

if((ch=='-')&&(!dau 1))

{

if(dem==0)

dau1==1;

dem++;

printf("%c",ch);

}

whi1e(ch!=l3);

printf(”\nSo thu 2: ");fflush(stdin); i=0;

dem=0;

Trang 5

{

ch=getch();

if(ch>='0'&&ch<='9'&&i<20) {

if(dem==0)

dau2= 1; dem++;

sobn[i]=ch;

printf("%c",ch); s2[i]=sobn[i]-48; if(s2[0]==0) continue; i++;

} len2=strlen(sobn);

n2=i-1;

if((ch=='-')&&(!dau2))

{

if(dem==0)

dau2==1;

dem++;

printf("%c",ch);

}

whi1e(ch!= l3);

printf(”\n\nMo ta phep nhan tay!\n");

printf("\n\nTich hai so la: \n");

if(dau1==—1)

{

Trang 6

gotoxy(50—lenl ,wherey());

printf(”-");

printf(”%s",son);

}

else

printf("%50s",son);

printf(”\n”);

if(len1>=len2)

{

gotoxy(48-len1 ,wherey());printf(” X\n”);

if(dau2==1)

{

gotoxy(50-len2,wherey());printf("-”);

printf("%s",sobn);

}

else

{

printf("%50s",sobn);

printf("\n");

gotoxy(50-len1 ,wherey());

for(i=0;i<=len1;i++) printf("-");

printf(”\n");

gotoxy(48-len2,wherey());printf("X\n”); if(dau2==-1) gotoxy(50-len2,wherey()),printf(”-"); printf("%s”,sobn); }

else

{

printf(”%50s",sobn);

printf(”\n");

Trang 7

gotoxy(50-len2,wherey()); for(i=0;i<=len2;i++) printf("-"); printf(”\n"); nhan();

printf("\nCo tiep tuc chuong trinh?(C/K):”);

do

{

ch=getch();

if(ch=='c'|| ch=='C') {

for(i=0;i<=n1;i++) son[i]=NULL;

for(i=0;i<=n2;i++) sobn[i]—NULL; p rintf("%c",ch);

goto tt;

} if(ch=='k'||ch=='K') {

printf("%c",ch);

break;

} whi1e(ch!=-1);

getch();

}

Ngày đăng: 07/03/2015, 20:33

TỪ KHÓA LIÊN QUAN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

w