Mã: #include <stdlib.h> #include <iostream.h> #include <conio.h> #include <string.h> long mu(int a,int n) { if (n==1) return a; else return a*mu(a,n-1); } long karatsuba (int x,int y,int n) { int a,b,c,d; long u,v,w; if (n<=1) return x*y; else if (n%2==0) { a=x/mu(10,n/2); b=x%mu(10,n/2); cout<<"\na="<<a<<"\nb="<<b; c=y/mu(10,n/2); d=y%mu(10,n/2); cout<<"\nc="<<c<<"\nd="<<d; u=karatsuba(a,c,n/2); v=karatsuba(b,d,n/2); w=karatsuba(a+b,c+d,n/2); return u*mu(10,n) + (w-u-v)*mu(10,n/2)+v; } else if (n%2!=0) { a=x/mu(10,n/2); b=x%mu(10,n/2); cout<<"\na="<<a<<"\nb="<<b; c=y/mu(10,n/2); d=y%mu(10,n/2); cout<<"\nc="<<c<<"\nd="<<d; u=karatsuba(a,c,n/2); v=karatsuba(b,d,n/2); w=karatsuba(a+b,d+c,n/2); return u*mu(10,n-1) + (w-u-v)*mu(10,n/2)+v; } return u; } void main() { char t1[10],t2[10]; long so1,so2,tam1,tam2; int n1,n2,n; clrscr(); cout<<"\nso1="; cin>>so1; tam1=so1; itoa(tam1,t1,10); n1=strlen(t1); cout<<"\nso2="; cin>>so2; tam2=so2; itoa(tam2,t2,10); n2=strlen(t2); if (n1>n2) n=n1; else n=n2; cout<<"\nKQ="<<karatsuba(so1,so2,n); getch(); } Code trên chỉ tính toán được những số có 4 chữ số trở xuống, muốn tính toán được 5 chữ số bạn có thể thay kiểu dữ liệu long thành unsigned long, vì tràn kiểu nên không tính toán được số từ 6 chữ số trở lên.