This shows you the differences between two versions of the page.
Both sides previous revisionPrevious revisionNext revision | Previous revision | ||
haas:spring2014:cprog:projects:nikhilam [2014/02/24 12:33] – [Nikhilam Multiplication] wedge | haas:spring2014:cprog:projects:nikhilam [2014/02/24 14:15] (current) – [Nikhilam Multiplication] wedge | ||
---|---|---|---|
Line 82: | Line 82: | ||
Multiplication using this principle is also rather straightforward, | Multiplication using this principle is also rather straightforward, | ||
+ | {{ : | ||
- | ====Squaring double digit values ending with 5==== | + | The procedure |
- | The trick here is two-fold. | + | |
- | One, we square | + | - To the right of the top number, put down its difference from the common power of 10 (100 in this case, which 97 falls 3 short of, hence the " |
+ | - To the right of the bottom number, do the same: 94 is 6 short of 100, so a " | ||
+ | - Pick a number (top or bottom, doesn' | ||
+ | - That result | ||
+ | - For the right hand side, multiply those two short values together (-6 * -3 = +18). THAT is the right hand side (a point to consider: because the common power is 100 in this case, the right hand side needs to be 2 digits) | ||
+ | - Concatenate the two together, and you get: **9118** | ||
- | Next, we take the value in the tens place, and multiply it by its increment: | + | ===Excess=== |
+ | And what about cases where the numbers are in excess of their common base? **Same thing**: | ||
- | * 1's increment (1+1) is 2, so 1*2 | + | < |
- | * 2's increment (2+1) is 3, so 2*3 | + | |
- | * 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 | + | 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 | ||
+ | </ | ||
- | For example: | + | ===Mixed=== |
+ | And how about mixed? One in excess, one short? | ||
< | < | ||
- | 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 129: | 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: | ||
</ | </ |