我正在尝试编写执行以下操作的代码:
将整数与数字相乘并继续进行过程,得出令人惊讶的结果,即乘积序列始终到达单个数字。
例如:
715-> 35-> 15-> 5
88-> 64-> 24-> 8
27-> 14-> 4
达到一位数所需的乘积数称为该整数的持久性数。因此715和88的持久性数为3,而27的持久性数为2。编写一个程序,查找持久性大于3的唯一两位数?
我能够提出一个大概的想法,下面是代码,但它似乎不起作用:
#include <iostream>
using namespace std;
/*
*
*/
int PersistentNum(int digit)
{
int x;
int pers = 0;
int y = 1;
while(x > 9)
{
do {
x = digit % 10;
y = y * digit;
x = x / 10;
} while(x > 0);
pers++;
x = y;
}
return pers;
}
int main()
{
int repNum;
int Persist;
cout << "Please enter a non-zero, positive integer: ";
cin >> repNum;
Persist = PersistentNum(repNum);
cout << " the Persistence of " << repNum <<" is " << Persist;
return 0;
}
答案 0 :(得分:1)
您每次都必须分配 y ,因为它保留了原有的已乘数值。
您还弄乱了原始代码中x和数字的含义
代替
func(int x)
您写了
func(int digit)
更正的代码
#include <iostream>
using namespace std;
/*
*
*/
int PersistentNum(int x)
{
int digit;
int pers = 0;
int y =1 ;
while(x > 9)
{
y = 1;
do{
digit = x % 10;
y = y* digit;
x = x/10;
}while(x > 0);
pers++;
x = y;
}
return pers;
}
int main()
{
int repNum;
int Persist;
cout<<"Please enter a non-zero, positive integer: ";
cin>>repNum;
Persist = PersistentNum(repNum);
cout<< " the Persistence of " << repNum <<" is " << Persist;
return 0;
}
答案 1 :(得分:0)
根据您的问题,您要我找两位数字
#include<iostream>
using namespace std;
int main()
{int y;int z;int temp;int n;
for(int x=10;x<100;x++)
{temp=0;n=x;
while(x>9){
y=x%10;
z=x/10;
x=y*z;temp++;
}
x=n;
if(temp>3){
cout<<"number is "<<n<<"persistence is"<<temp;
/*number is 77 persistence is 4 */
break;}/*i have used break i my code because 77 is the only two digit number with persistence >3*/
}
}
答案 2 :(得分:0)
首先,您必须在第一个循环之前初始化x-或仅在两个循环中使用do..while
循环,了解垃圾值。
int PersistentNum(int number)
{
int digit, pers = 0, curr_num;
do {
curr_num = 1;
do {
digit = number % 10;
curr_num = curr_num * digit;
number = number / 10;
} while(number > 0);
cout << curr_num << " ";
number = curr_num;
pers++;
} while(number > 9);
cout << endl;
return pers;
}