NOWCODER考研机试专题

17. 特殊乘法

2019-01-14  本文已影响0人  IceFrozen
题目描述

写个算法,对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;
}
上一篇 下一篇

猜你喜欢

热点阅读