解题思路:将两个乘数分别存入数组,按照乘法竖式规则计算,满十向前一位进一,将计算结果存入数组中,最后输出。
注意事项:将字符'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 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复