题目描述
写个算法,对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
源代码
#include <iostream>
#include <stdio.h>
#include <string.h>
using namespace std;
int main(){
char str1[10],str2[10];
long long res;
int len1,len2 = 0;
while(scanf("%s %s",&str1,&str2) != EOF){
res = 0;
len1 = strlen(str1);
len2 = strlen(str2);
for(int i = 0;i < len1;i ++){
for(int j = 0;j < len2;j ++){
res += (str1[i] - '0') * (str2[j] - '0');
}
}
printf("%d\n",res);
}
return 0;
}
做题思路
这道题和之前的A+B所要考虑的问题是一样的,主要是解决输入问题,然后再根据规则计算就好了。
1、明确何时停止输入
while循环到输入结束为止
2、按要求输入
字符串输入,定义为数组,数组大小为10就好了,因为输入小于1000000000
3、按规则计算
按照题目的规则
4、得出答案
将答案输出即可
总结
在运行的时候,不知道为什么停不了,我以为是while写成死循环了,但和A+B几乎一模一样,不知道怎么回事,最后实在是找不到问题就直接提交了,看oj显示的是什么问题。结果,oj上运行是正确的,我觉得可能是编译器的问题把,不逃清楚。
还有就是在计算结果需要将字符转换成数值,所以需要 - ‘ 0 ’,这样得到的是数值。在写这里时发生了错误,得出结果的时候写成了:
res += str1[i] * str2[j] - '0'; 这样是有问题的,应该将两个都转换成数值这样计算才会的到正确的结果:
res += (str1[i] - '0') * (str2[j] - '0');