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

注意事项:将字符'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.0分

0 人评分

C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:

一点编程也不会写的:零基础C语言学练课程

解决困扰你多年的C语言疑难杂症特性的C语言进阶课程

从零到写出一个爬虫的Python编程课程

只会语法写不出代码?手把手带你写100个编程真题的编程百练课程

信息学奥赛或C++选手的 必学C++课程

蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程

手把手讲解近五年真题的蓝桥杯辅导课程

评论列表 共有 0 条评论

暂无评论