题目描述
知识点
数位拆分
结果
实现
码前思考
- 就是将一个数字进行拆分,拆分的方法就是对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;
}
码后反思
- 之前写题目的时候我没有意识到 如果数字负数该怎么处理 ,题也还是过了。后来,我运行了一下数字是负数的情况:
我们发现这个结果跟《王道机试指南》上讲的一样——余数的符号和被除数的符号相等。例如 。因此,我的代码还是能通过这个考验的,只是我自己没有意识到! - 注意数位拆分的循环应该是这样写的:
while循环在后面。do{ A[lenA++] = a % 10; a = a / 10; }while(a!=0);
- 下面是关于为什么上面的循环能够得到每一位的证明:
- 其实对于这道题,并不用使用数位拆解,直接字符串数组也是可以的!