数位拆解——特殊乘法

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

解题心得:

解法一

#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;

}


上一篇下一篇

猜你喜欢

热点阅读