题目
写个算法,对2个小于1000000000的输入,求结果。特殊乘法举例:123 * 45 = 1 * 4 +1 * 5 +2 * 4 +2 * 5 +3 * 4+3 * 5
输入
两个小于1000000000的数
输出
输入可能有多组数据,对于每一组数据,输出Input中的两个数按照题目要求的方法进行运算后得到的结果。
输入样例
24 65
42 66666
3 67
输出样例
66
180
39
解题思路
这道题总体来说不难,有挺多种解法的,我采用的是还挺麻烦的一种做法可以作为参考看一下。具体来说是把输入的两个数存放在字符串数组中,为什么要存放在字符串数组中而不是直接存放在整形变量中呢,因为要取长度,再把第二个字符串数组中的数一个个拆分出来放在整形数组中(因为只有第二个数组中的数才会使用多次)
转换时还是使用了sscanf这个表达式。
再用一个循环将第一个整数拆分开来分别乘整形数组,最后输出即可。
优化方案
可以将数直接输入到两个整形变量中,用一个循环先把第二个数拆分开存放到数组中,再使用一个循环把第一个数拆分开来分别乘数组内的数,最后输出即可。
总体代码
#include<stdio.h>
#include<string.h>
char a[20],b[20];
int num[20];
int main(){
while(scanf("%s%s",a,b)!=EOF){
int sum=0;
int n,m,u,v;
int x=strlen(a);
int y=strlen(b);
sscanf(a,"%d",&n);
sscanf(b,"%d",&m);
for(int i=0;i<y;i++){
num[i]=m%10;
m=m/10;
// printf("%d\n",num[i]);
}
while(n!=0){
u=n%10;
n=n/10;
for(int i=0;i<y;i++){
sum+=u*num[i];
}
}
printf("%d\n",sum);
}
return 0;
}
谢谢观看!