题目描述
写个算法,对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;
}
网友评论