A × B problem(大数相乘算法)

  • Post author:
  • Post category:其他


#include <stdio.h>
#include <string.h> 
int main()
{
    char a[101],b[101];//定义a,b数组!
    int i,j,k,cas,count=1,num2,num3;
    scanf("%d",&cas);//获取数据的组数
    getchar();
    while(cas--)
    {
        int c[10000]={0};//定义一个整型数组c
        scanf("%s %s",a,b);//获取字符串a,b
        num2=strlen(a);//num2为数组a的长度
        num3=strlen(b);//num3为数组c的长度
    getchar();
    if(strcmp(a,"0")==0||strcmp(b,"0")==0)//当字符串a和字符串b为0时!
    {
        printf("Case %d:\n",count);
        printf("%s * %s = 0\n",a,b);
        count++;
    }
    else {
            for(i=0;i<num2;i++)
			{
				for(j=0;j<num3;j++)
				{
					c[i+j]+=(a[num2-i-1]-'0')*(b[num3-j-1]-'0');//这个得用纸画才好理解!
					k=i+j;
					while(c[k]>=10)
					{
						c[k+1]+=c[k]/10;c[k]%=10;k++;}
					}
			}
        i=9999;num2=i;//num2记录的是字符串c的长度!
        while(c[i]==0)//当c[i]==0说明字符串前置为0,就要后移,找到实际数!
        {            
            i--;num2= i;
        }
        printf("Case %d:\n",count);
        count++;
        printf("%s * %s = ",a,b);
        for(i=num2;i>=0;i--)
        {printf("%d",c[i]);}
        printf("\n");}
    if(cas>=1)//当cas>=1的时候,每次执行完,空一行!
    {printf("\n");}
}
return 0;
}