File tree Expand file tree Collapse file tree 6 files changed +144
-0
lines changed Expand file tree Collapse file tree 6 files changed +144
-0
lines changed Original file line number Diff line number Diff line change 1+ #include <stdio.h>
2+ #include <math.h>
3+ #include <string.h>
4+
5+ #define max (x ,y ) ((x) >= (y)) ? (x) : (y)
6+
7+ int intlen (int n ){
8+ int count = 0 ;
9+ while (n != 0 )
10+ {
11+ // n = n/10
12+ n /= 10 ;
13+ ++ count ;
14+ }
15+ return count ;
16+ }
17+
18+ int karatsuba (int x , int y ){
19+ if (intlen (x )== 1 || intlen (y )== 1 ) {
20+ return x * y ;
21+ }
22+ else {
23+ int n = max (intlen (x ),intlen (y ));
24+ int z = n / 2 ;
25+ int a = x / (int )pow (10 ,z );
26+ int b = x % (int )pow (10 ,z );
27+ int c = y / (int )pow (10 ,z );
28+ int d = y % (int )pow (10 ,z );
29+ int ac = karatsuba (a ,c );
30+ int bd = karatsuba (b ,d );
31+ int adbc = karatsuba (a + b ,c + d ) - ac - bd ;
32+ return ac * pow (10 ,2 * z ) + (adbc * pow (10 ,z )) + bd ;
33+ }
34+ }
35+ int main (void ) {
36+ printf ("%d" ,karatsuba (923 ,1723 ));
37+ return 0 ;
38+ }
Original file line number Diff line number Diff line change 1+ #include < iostream>
2+ #include < string>
3+ #include < algorithm>
4+ #include < cmath>
5+ using namespace std ;
6+
7+ int karatsuba (int x, int y){
8+ if ((to_string (x).length ()==1 ) || (to_string (y).length ()==1 )) {
9+ return x*y;
10+ }
11+ else {
12+ int n = max (to_string (x).length (),to_string (y).length ());
13+ int z = n / 2 ;
14+ int a = x / (int )pow (10 ,z);
15+ int b = x % (int )pow (10 ,z);
16+ int c = y / (int )pow (10 ,z);
17+ int d = y % (int )pow (10 ,z);
18+ int ac = karatsuba (a,c);
19+ int bd = karatsuba (b,d);
20+ int adbc = karatsuba (a+b,c+d) - ac - bd;
21+ return ac * pow (10 ,2 *z) + (adbc * pow (10 ,z)) + bd;
22+ }
23+ }
24+
25+ int main () {
26+ cout << karatsuba (923 ,1723 );
27+ }
Original file line number Diff line number Diff line change 1+ class Main {
2+ public static void main (String [] args ) {
3+ System .out .print (karatsuba (923 ,1723 ));
4+ }
5+ private static int karatsuba (int x , int y ){
6+ if (String .valueOf (x ).length ()==1 || (String .valueOf (y ).length ()==1 )){
7+ return x *y ;
8+ }
9+ else {
10+ int n = Math .max (String .valueOf (x ).length (),String .valueOf (y ).length ());
11+ int z = n / 2 ;
12+ int a = x /(int ) Math .pow (10 , z );
13+ int b = x %(int ) Math .pow (10 , z );
14+ int c = y /(int ) Math .pow (10 , z );
15+ int d = y %(int ) Math .pow (10 , z );
16+ int ac = karatsuba (a ,c );
17+ int bd = karatsuba (b ,d );
18+ int adbc = karatsuba (a +b ,c +d ) - ac - bd ;
19+ return ac * (int )Math .pow (10 , (2 *z )) + (adbc * (int )Math .pow (10 , z )) + bd ;
20+ }
21+ }
22+ }
Original file line number Diff line number Diff line change 1+ function karatsuba ( x , y ) {
2+ if ( x . toString ( ) . length == 1 || y . toString ( ) . length == 1 ) {
3+ return x * y ;
4+ }
5+ else {
6+ var n = Math . max ( x . toString ( ) . length , y . toString ( ) . length )
7+ var z = n / 2
8+ var a = x / Math . pow ( 10 , z )
9+ var b = x % Math . pow ( 10 , z )
10+ var c = y / Math . pow ( 10 , z )
11+ var d = y % Math . pow ( 10 , z )
12+ var ac = karatsuba ( a , c )
13+ var bd = karatsuba ( b , d )
14+ var adbc = karatsuba ( a + b , c + d ) - ac - bd
15+ return ac * Math . pow ( 10 , 2 * z ) + ( adbc * Math . pow ( 10 , z ) ) + bd
16+ }
17+ }
18+
19+ console . log ( karatsuba ( 923 , 1723 ) )
Original file line number Diff line number Diff line change 1+ fun main (args : Array <String >) {
2+ print (karatsuba(923 , 1723 ))
3+ }
4+ fun karatsuba (x : Int , y : Int ):Int {
5+ if ((x).toString().length == 1 || ((y).toString().length == 1 ))
6+ {
7+ return x * y
8+ }
9+ else
10+ {
11+ val n = Math .max((x).toString().length, (y).toString().length)
12+ val z = n / 2
13+ val a = x / Math .pow(10.0 , z.toDouble()).toInt()
14+ val b = x % Math .pow(10.0 , z.toDouble()).toInt()
15+ val c = y / Math .pow(10.0 , z.toDouble()).toInt()
16+ val d = y % Math .pow(10.0 , z.toDouble()).toInt()
17+ val ac = karatsuba(a, c)
18+ val bd = karatsuba(b, d)
19+ val adbc = karatsuba(a + b, c + d) - ac - bd
20+ return ac * Math .pow(10.0 , (2 * z).toDouble()).toInt() + (adbc * Math .pow(10.0 , z.toDouble()).toInt()) + bd
21+ }
22+ }
Original file line number Diff line number Diff line change 1+ def karatsuba (x ,y ):
2+ if len (str (x )) or len (str (y )) :
3+ return x * y
4+ else :
5+ n = max (len (str (x )),len (str (y )))
6+ z = n / 2
7+ a = x / 10 ** (z )
8+ b = x % 10 ** (z )
9+ c = y / 10 ** (z )
10+ d = y % 10 ** (z )
11+ ac = karatsuba (a ,c )
12+ bd = karatsuba (b ,d )
13+ adbc = karatsuba (a + b ,c + d ) - ac - bd
14+ return ac * 10 ** (2 * z ) + (adbc * 10 ** z ) + bd
15+
16+ karatsuba (923 ,1723 )
You can’t perform that action at this time.
0 commit comments