美文网首页
数位拆解——特殊乘法

数位拆解——特殊乘法

作者: 辘轳鹿鹿 | 来源:发表于2020-06-26 14:08 被阅读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;
    
    }
    
    
    

    相关文章

      网友评论

          本文标题:数位拆解——特殊乘法

          本文链接:https://www.haomeiwen.com/subject/jvmyfktx.html