This shows you the differences between two versions of the page.
Next revision | Previous revision | ||
haas:spring2014:cprog:projects:nikhilam [2014/02/24 12:27] – created wedge | haas:spring2014:cprog:projects:nikhilam [2014/02/24 14:15] (current) – [Nikhilam Multiplication] wedge | ||
---|---|---|---|
Line 66: | Line 66: | ||
* 8 + **2** = 10 | * 8 + **2** = 10 | ||
- | So our answer is 7322 | + | So our answer is: 7322 |
- | ====Nikhilam Multiplication==== | + | The trick is to make sure we have enough digits to match up with the zeroes in the power of 10. If the number |
- | Squaring | + | |
- | * 5 squared (5<nowiki>^</ | + | <code> |
- | * 8 squared (8< | + | |
- | While not outwardly a difficult procedure, the nature of multiplying multiple digit numbers in your head can quickly result in more steps (and more steps means more time, if doing things the traditional way). | + | |
+ | - 52 | ||
+ | ----- ----- | ||
+ | 948 | ||
+ | </ | ||
- | Finding a shortcut through | + | Pretty neat, eh? |
+ | ====Nikhilam Multiplication==== | ||
+ | Multiplication using this principle is also rather straightforward, | ||
- | This particular trick relies on a subset of the squares of double digit values (and appears to work on some triple digit values): those ending with a 5 (a five in the ones place). | + | {{ :haas: |
- | The operational scope of this trick will be just those two-digit values ending with 5: | + | The procedure is basically as follows: |
- | * 15 | + | |
- | | + | |
- | | + | |
- | * 45 | + | |
- | | + | |
- | | + | |
- | * 75 | + | |
- | * 85 | + | |
- | | + | |
- | ====Squaring double digit values ending with 5==== | + | ===Excess=== |
- | The trick here is two-fold. | + | And what about cases where the numbers are in excess of their common base? **Same thing**: |
- | One, we square the 5 to get 25. That is how our result will end (so bam! we now have our tens and ones place already solved) | + | < |
- | Next, we take the value in the tens place, and multiply it by its increment: | + | 103 +3 103 is 3 above 100 |
+ | x 107 +7 107 is 7 above 100 | ||
+ | === === | ||
+ | 103+7 3*7 half cross add on the left, multiply excess numbers on right | ||
+ | 110 21 make sure right hand value is 2 digits (100 = 10 to the 2nd power) | ||
+ | |||
+ | 11021 | ||
+ | </ | ||
- | * 1's increment (1+1) is 2, so 1*2 | + | ===Mixed=== |
- | * 2's increment (2+1) is 3, so 2*3 | + | And how about mixed? One in excess, one short? |
- | * 3's increment (3+1) is 4, so 3*4 | + | |
- | * 4's increment (4+1) is 5, so 4*5 | + | |
- | * ... | + | |
- | * 9's increment (9+1) is 10, so 9*10 | + | |
- | + | ||
- | We take this result and append the 25 after it. | + | |
- | + | ||
- | For example: | + | |
< | < | ||
- | 15 * 15 = 1*(1+1) 5*5 | + | |
- | = 1*2 5*5 | + | 106 |
- | = 2 25 | + | x 97 -3 3 short of 100 |
- | = 225 | + | ====== ===== |
+ | | ||
+ | | ||
+ | |||
</ | </ | ||
- | and: | + | Now, because the right hand value is negative, we have a " |
< | < | ||
- | 75 * 75 = 7*(7+1) 5*5 | ||
- | = 7*8 5*5 | ||
- | = 56 25 | ||
- | = 5625 | ||
- | </ | ||
+ | 103 100 | ||
+ | | ||
+ | | ||
+ | 102 82 <-- all by nine, last by 10 | ||
+ | | ||
+ | 10282 and voila! Our answer. | ||
+ | </ | ||
=====Program===== | =====Program===== | ||
- | It is your task to write the program that will use the above method to compute | + | It is your task to write the program that will use the above method to multiply two numbers together (you can make the assumption that the user will only ever be putting in values close to a common base). |
Your program should: | Your program should: | ||
- | * prompt the user for the number | + | * prompt the user for the two numbers |
- | * perform the task (process) | + | * determine the common power of 10 |
+ | * perform the task (nikhilam multiplication | ||
* display the final value (output) | * display the final value (output) | ||
Line 138: | Line 144: | ||
<cli> | <cli> | ||
lab46: | lab46: | ||
- | Enter value: 34 | + | Enter first number: 91 |
- | 34 x 34 = 5625 | + | Enter second number: 99 |
+ | 91 x 99 = 9009 | ||
lab46: | lab46: | ||
</ | </ |