codeup 1906 问题 C: 特殊乘法 mw的解题思路与优化方案

文章目录题目解题思路优化方案总体代码题目写个算法,对2个小于1000000000的输入,求结果。特殊乘法举例:123 * 45 = 1 * 4 +1 * 5 +2 * 4 +2 * 5 +3 * 4+3 * 5输入两个小于1000000000的数输出输入可能有多组数据,对于每一组数据,输出Input中的两个数按照题目要求的方法进行运算后得到的结果。输入样例24 6542 666663 67输出样例6618039解题思路这道题总体来说不难,有挺多种解法的,我采用的是还挺
摘要由CSDN通过智能技术生成

题目

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

谢谢观看!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值