特殊乘法——清华大学

题目描述

在这里插入图片描述

知识点

数位拆分

结果

在这里插入图片描述

实现

码前思考

  1. 就是将一个数字进行拆分,拆分的方法就是对10取余数。

代码实现

//其实这道题目可以直接使用字符串 
#include "bits/stdc++.h"
using namespace std;
const int maxn = 20;

int a;
int b;
int A[maxn];
int B[maxn];
int lenA;
int lenB;

int main(){
	while(~(scanf("%d",&a))){
		scanf("%d",&b);
		lenA = 0;
		lenB = 0;
		
		do{
			A[lenA++] = a % 10;
			a  = a / 10;
		}while(a!=0);
		
		do{
			B[lenB++] = b % 10;
			b = b / 10;
		}while(b != 0);
		
		int ans=0;
		for(int i=0;i<lenA;i++){
			for(int j=0;j<lenB;j++){
				ans += A[i]*B[j];
			}
		}
		
		printf("%d\n",ans);
	} 
	return 0;
}
 

码后反思

  1. 之前写题目的时候我没有意识到 如果数字负数该怎么处理 ,题也还是过了。后来,我运行了一下数字是负数的情况:
    在这里插入图片描述
    我们发现这个结果跟《王道机试指南》上讲的一样——余数的符号被除数的符号相等。例如 12 % 10 = 2 -12 \% 10 = -2 。因此,我的代码还是能通过这个考验的,只是我自己没有意识到!
  2. 注意数位拆分的循环应该是这样写的:
    do{
    	A[lenA++] = a % 10;
    	a  = a / 10;
    }while(a!=0);
    
    while循环在后面。
  3. 下面是关于为什么上面的循环能够得到每一位的证明:在这里插入图片描述
  4. 其实对于这道题,并不用使用数位拆解,直接字符串数组也是可以的!
发布了173 篇原创文章 · 获赞 3 · 访问量 5239

猜你喜欢

转载自blog.csdn.net/yc_cy1999/article/details/105427895