徐文倩


私信TA

用户名:tzu190341126

访问量:1537

签 名:

等  级
排  名 6861
经  验 1372
参赛次数 0
文章发表 2
年  龄 0
在职情况 学生
学  校 泰州学院
专  业

  自我简介:

解题思路:将两个乘数分别存入数组,按照乘法竖式规则计算,满十向前一位进一,将计算结果存入数组中,最后输出。

注意事项:将字符'0'-'9'转换为数字,只需将字符变量减去'0'就行了。

              字符和数字在内存里都是以ASCII码形式存储的。减去'0',其实就是减去字符'0'的ASCII码,而字符'0'的ASCII码是48,所以减去'0'也就是减去48,然后就可 以得到字符对应的数字了。


参考代码:

#include<stdio.h>

#include<string.h>

int multiple(int a[],int b[],int d1,int d2)

{

    int c[20000]={0};//预备存入两数相乘的积 

    int i,j,k,d;

    for(i=0;i<d2;i++)//从个位算起 

    {

        k=i; 

        for(j=0;j<d1;j++,k++)//算完一趟就将结果加到数组c中 

        {

            c[k+1]+=(a[j]*b[i]+c[k])/10;//进位的数加到下一位上

            c[k]=(a[j]*b[i]+c[k])%10;        

        }

        if(c[k]>9)//如果最高位大于9 

        {

            c[k+1]+=(a[j]+b[i]+c[k])/10;//再向高位进一位

            c[k]=c[k]%10;

        }

    }

    if(c[k]!=0) //如果结果的最高位不为0,该位有效,从该位开始输出;否则从下一位开始输出

         k++;     

    d=k;

    for(i=d-1;i>=0;i--)

        printf("%d",c[i]);

}

int main()

{

    int a[10000],b[10000];

    char s1[10000],s2[10000];

    int d1,d2,i;

    scanf("%s%s",s1,s2);//将两个整数以字符串的形式输入 

    d1=strlen(s1);//求字符串的长度 

    d2=strlen(s2);

    for(i=0;i<d1;i++)

    {

        a[i]=s1[d1-1-i]-'0';//将输入的字符串从后往前依次转换成整型存入数组中 

    }

    for(i=0;i<d2;i++)

    {

        b[i]=s2[d2-1-i]-'0';

    }

    multiple(a,b,d1,d2);//调用函数,将两数相乘,并将结果输出 

    return 0;

}


 

0.0分

1 人评分

  评论区

  • «
  • »