王道计算机机试——数位拆解、特殊乘法

王道计算机机试——数位拆解、特殊乘法

一、题目描述

写个算法,对 2 个小于 1000000000 的输入,求结果。 特殊乘法举例: 123 * 45 = 14 +15 +24 +25 +34+35
输入:
两个小于 1000000000 的数
输出:
输入可能有多组数据,对于每一组数据,输出 Input 中的两个数按照题目 要求的方法进行运算后得到的结果。

二、代码

第一种方法

#include<iostream>
using namespace std;
int main() {
	int a, b;//保存两个整数的变量
	while (cin >> a >> b) {//输入两个整数
		int buf1[20], buf2[20], size1 = 0, size2 = 0;//用buf1,buf2分别保存
		//从两个整数中拆解出来的数字,其数量由size1,size2表示
		while (a != 0) {//数位拆解,只要当a大于0就不断重复拆解过程
			buf1[size1++] = a % 10;//取当前个位上的数字,将其保存
			a /= 10;//将所有数位上的数字移动到高一位上
		}
		while (b != 0) {//拆解第二个数字
			buf2[size2++] = b % 10;
			b /= 10;
		}
		int ans = 0;//计算答案
		for (int i = 0; i < size1; i++)
			for (int j = 0; j < size2; j++)
				ans += buf1[i] * buf2[j];//两两相乘后相加
		cout << ans;
	}
	return 0;
}

第二种方法

#include<iostream>
using namespace std;
int main() {
	char a[11], b[11];
	while (cin >> a >> b) {//利用字符串将两个数字读入,作为字符串保存在内存中
		int ans = 0;//累加变量
		for (int i = 0; a[i] != 0; i++) {//遍历a中每一个字符,直到a字符串结尾
			for (int j = 0; b[j] != 0; j++) {//遍历b中每一个字符
				ans += (a[i] - '0') * (b[j] - '0');//计算a,b中每一个字符所代表的的数字两两乘积的和
			}
		}
		cout << ans;//输出答案
	}
	return 0;
}
发布了12 篇原创文章 · 获赞 12 · 访问量 168

猜你喜欢

转载自blog.csdn.net/xyzxyzxyz1999/article/details/105151263