主题:C++编程,求高手帮忙,不胜感激
题目:求一个这样的6位数,它乘2,3,4,5,6均是其原数的不同组合
设计方法和基本原理
1. 问题描述:
要找这样的的一个6位数,即由6个数字组成,当它分别乘2,3,4,5,6后得到的积也是由原数的6个数字组成的,即仍为6位数。
2. 问题的解决方案:
根据问题描述,可以将问题解决分为三步:
(1)确定该数的范围,因为该数在乘2,3,4,5,6后得到的积也为6位数,所以,该数最大应不超过:1000000/6=166667,因此可以在100000~166667范围内搜索;
(2)进一步优化:由于这个数乘3为原来数字的组合,说明原来的数是3的倍数(一个数若为3的倍数,则该数的各个位之和为3的倍数)。由于这个数是3的倍数,则这个数乘3后的数,定为9的倍数。所以这个数为9的倍数(一个数若为9的倍数,则该数的各个位之和为9的倍数)。这样搜索范围缩小为100008开始到166666,步长为9。
(3)分离出该数的6位数字,存放到一个数组中,而后将该数乘2、3、4、5、6后得到的积也分离出来存放到数组中。将得到的这些数组进行排序,而后再重新组成6个6位数,若这6个数均相同,则该数满足要求。
四、主要技术问题的描述
根据三的分析, 主要问题在于数的各位数的分离和重新组合。如该数为num,其各位存放到数组a[6]中,
t=num; //分离num的各位数
for(int i=5;i>=0;i--)
{
a[i]=t%10; //分离将个位存放到a[5],十位存放到a[4]…最高位存放到a[0]
t=num/10;
}
设计方法和基本原理
1. 问题描述:
要找这样的的一个6位数,即由6个数字组成,当它分别乘2,3,4,5,6后得到的积也是由原数的6个数字组成的,即仍为6位数。
2. 问题的解决方案:
根据问题描述,可以将问题解决分为三步:
(1)确定该数的范围,因为该数在乘2,3,4,5,6后得到的积也为6位数,所以,该数最大应不超过:1000000/6=166667,因此可以在100000~166667范围内搜索;
(2)进一步优化:由于这个数乘3为原来数字的组合,说明原来的数是3的倍数(一个数若为3的倍数,则该数的各个位之和为3的倍数)。由于这个数是3的倍数,则这个数乘3后的数,定为9的倍数。所以这个数为9的倍数(一个数若为9的倍数,则该数的各个位之和为9的倍数)。这样搜索范围缩小为100008开始到166666,步长为9。
(3)分离出该数的6位数字,存放到一个数组中,而后将该数乘2、3、4、5、6后得到的积也分离出来存放到数组中。将得到的这些数组进行排序,而后再重新组成6个6位数,若这6个数均相同,则该数满足要求。
四、主要技术问题的描述
根据三的分析, 主要问题在于数的各位数的分离和重新组合。如该数为num,其各位存放到数组a[6]中,
t=num; //分离num的各位数
for(int i=5;i>=0;i--)
{
a[i]=t%10; //分离将个位存放到a[5],十位存放到a[4]…最高位存放到a[0]
t=num/10;
}