微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

大数乘(正整数)

大数乘(正整数)

My   solution:

/*2015.10.31*/

#include<stdio.h>
#include<string.h>
int t1[100],t2[100],t3[1000]; 
char c1[100],c2[100];
int main()
{
	int i,j=0,m1,m2,k=0,g;
	gets(c1);
	gets(c2);
	memset(t3,sizeof(t3));
	m1=strlen(c1);
	m2=strlen(c2);
	for(i=m1-1;i>=0;i--)
	{
			t1[j++]=c1[i]-'0';
	 } 
	j=0;
	for(i=m2-1;i>=0;i--)
	{
			t2[j++]=c2[i]-'0';
	}
	for(i=0;i<m1;i++)
	{
		k=i;/*当t1数组中的第i个元素和t2整个数组相乘时,把求得的结果按位依次存放在以i为下标起点的t3数组中,见下图*/
		for(j=0;j<m2;j++)           
		{                          
			t3[k++]+=t1[i]*t2[j];  
		}	                       
	}     	                          
	for(i=0;i<k;i++)           
	{                          
		if(t3[i]>9)               
		{                        
			g=t3[i]/10;
			t3[i]%=10;
			if(i==k-1)/*考虑最高位进位,所以数组长度也要增加,可能某个数组元素为3位数,例124,则原则上需连续两次进位*/ 
			{         /*,但实际只需进一次位即12,12加入到新的数组元素中再通过上述循环继续进位就解决了*/
				k+=1;	
			}	
			t3[i+1]+=g;
		}
	}
	for(i=k-1;i>=0;i--)
	printf("%d",t3[i]);
	return 0;
}
   /* 如:      t3[4]          t3[5]         t3[6]
(上述程序:)      124            56             0
                  4           12+56=68         0
                  4             8              6
              
              
  较复杂方法:4+2*10+1*100      5*10+6        0 
                 4              2+6+5*10      1 
                 4                2+6         1+5 
   */ 
   
             
        //下标:  6      5       4       3       2     1       0
      // t2元素:        2       3       5       4     8       6 
       //t1元素:                         4       3     1       2       
//第一次相乘结果:         *       *       *       *     *       *(i=0) 
//第二次相乘结果:  *      *       *       *       *     *         (i=1)       
//第三次。。。。。。               *       *       *              (i=2) 
//第四次 ..........               *       *                      (i=3)
//把四次结果相加放入t3数组中......... 
//再考虑进位。 
类似:
     243
    X 21
__________
     243
    486
——————
    5103

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐