解题思路:将两个乘数分别存入数组,按照乘法竖式规则计算,满十向前一位进一,将计算结果存入数组中,最后输出。
注意事项:将字符'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 人评分
C语言程序设计教程(第三版)课后习题11.8 (C语言代码)浏览:910 |
简单的a+b (C语言代码)浏览:560 |
钟神赛车 (C语言代码)浏览:665 |
计算质因子 (C语言代码)浏览:778 |
输入输出格式练习 (C语言代码)浏览:883 |
敲七 (C++代码)浏览:1119 |
C语言程序设计教程(第三版)课后习题8.2 (C语言代码)浏览:1108 |
C语言程序设计教程(第三版)课后习题8.6 (C语言代码)浏览:595 |
C语言程序设计教程(第三版)课后习题10.1 (C语言代码)浏览:826 |
非常简单的算法,题解1049:C语言程序设计教程(第三版)课后习题11.1 (C语言代码)浏览:639 |