17. 特殊乘法

作者: IceFrozen | 来源:发表于2019-01-14 09:56 被阅读0次
    题目描述

    写个算法,对2个小于1000000000的输入,求结果。 特殊乘法举例:123 * 45 = 14 +15 +24 +25 +34+35

    输入描述:

    两个小于1000000000的数

    输出描述:

    输入可能有多组数据,对于每一组数据,输出Input中的两个数按照题目要求的方法进行运算后得到的结果。

    示例1

    输入

    123 45
    

    输出

    54
    
    解法
    #include <stdio.h>
    #include <math.h>
    #include <malloc.h>
    
    int specialMultiply(int a, int b) {
        int sum = 0;    //返回的和
        int na = (int)log10(a) + 1;    //a 的位数
        int nb = (int)log10(b) + 1;    //b 的位数
        int *numa = (int *) malloc (sizeof(int) * na);    //动态分配数组,与 a 的位数相同即可,用来存 a 的每一位
        int *numb = (int *) malloc (sizeof(int) * nb);    //动态分配数组,与 b 的位数相同即可,用来存 b 的每一位
        for(int i = na - 1; i >= 0; i--){    //计算出 a 的每一位并存在数组中
            numa[i] = a / pow(10, i);
            a -= numa[i] * pow(10, i);
        }
        for(int i = nb - 1; i >= 0; i--){    //计算出 b 的每一位并存在数组中
            numb[i] = b / pow(10, i);
            b -= numb[i] * pow(10, i);
        }
        for(int i = 0; i < na; i++)    //题目要求的特殊乘法
            for(int j = 0; j < nb; j++)
                sum += numa[i] * numb[j];
        free(numa);
        free(numb);
        return sum;
    }
    
    int main() {
        for(int a, b; ~scanf("%d %d", &a, &b);)
            printf("%d", specialMultiply(a, b));
        return 0;
    }
    

    相关文章

      网友评论

        本文标题:17. 特殊乘法

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