数位拆解——特殊乘法
2020-06-26 本文已影响0人
辘轳鹿鹿
题目描述
写个算法,对2个小于1000000000的输入,求结果。 特殊乘法举例:123 * 45 = 1 * 4 +1 * 5 +2 * 4 +2 * 5 +3 * 4+3 * 5
输入描述:
两个小于1000000000的数
输出描述:
输入可能有多组数据,对于每一组数据,输出Input中的两个数按照题目要求的方法进行运算后得到的结果。
示例1
输入
123 45
输出
54
解题心得:
- 如果评判系统返回了运行时错误,可以检查是否出现了模零错误
- %运算符在行为上按如下步骤进行(以a%b为例):首先计算出a的绝对值被b的绝对值除所得的余数,再使该余数的符号与a保持一致。
- 而数论指出,余数的取值范围为从0到除数减1。所以我们需要对取得的余数加上除数后再对该和求模 image.png
解法一
#include<stdio.h>
#include<stdlib.h>
int main(){
int m,n,i,j;
while(scanf("%d %d",&m,&n)!=EOF){
int marray[20],narray[20],mnum=0,nnum=0,sum=0;
while(m/10!=0){
marray[mnum]=m%10;
m=m/10;
mnum++;
}
marray[mnum]=m;
while(n/10!=0){
narray[nnum]=n%10;
n=n/10;
nnum++;
}
narray[nnum]=n;
for(i=0;i<=nnum;i++){
for(j=0;j<=mnum;j++){
sum+=narray[i]*marray[j];
}
}
printf("%d\n",sum);
}
return 0;
}
解法二
#include<stdio.h>
#include<stdlib.h>
int main(){
char m[20],n[20];
int i,j;
while(scanf("%s %s",m,n)!=EOF){
int sum=0;
for(i=0;m[i]!=0;i++){
for(j=0;n[j]!=0;j++){
sum+=(m[i]-'0')*(n[j]-'0');
}
}
printf("%d\n",sum);
}
return 0;
}