九个九相乘用数组怎么乘啊

来源:百度知道 编辑:UC知道 时间:2024/06/30 19:03:07
就像竖式乘法一样,用被乘数乘以乘数的每一位

颜颜
上面的程序算法很简练,不错。但是有些问题,改写如下,并加了注释,程序已在win-tc和dev-c++下验证通过,结果正确。(应网友之约来掺和)
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
int main(void)
{
int ch1[9] , ch2[9] ,ch3[20]={0};/* 数组ch3[]开始必须清零 */
int i = 0 , j = 0 ,k;
for(i = 0 ; i < 9 ; i++)
ch1[i] = ch2[i] = 9 ;/* 得到两个相乘数999999999 */
for(i = 0 ; i < 9 ; i++) /* 模拟手动乘法过程*/
{
for(j = 0 ; j < 9 ; j++) /* 一个数ch1[]的某一位分别与ch2[]的各位相乘 */
{
k =i + j ;/* 移位相加,i决定移位多少位 */
ch3[i + j] += ch1[i] * ch2[j] ; /* 位相乘 */
while(ch3[k]/10)/* 如果位相乘结果大于9 */
{
ch3[k+1] += ch3[k] / 10 ; /* 相乘结果的十位数加到ch3[]高1位 */
ch3[k] = ch3[k] % 10 ;/* 相乘结果的个位保存到ch3[]的当前位 */
k++;
}
}
}
for(i = 19 , j = 0 ; i >= 0 ; i--)
{
if((ch3[i] == 0) && (j == 0)) /* 消除结果最前面多余的无效0 */
continue ;
else
{
printf("%d",ch3[i]);
j = 1 ;/* j作为结果最前面是否有无效0的标记 *