乘以整数的持久性

multiplying Persistenance of an integer

本文关键字:持久性 整数      更新时间:2023-10-16

我正在尝试制作执行以下操作的代码:

将整数的数字相乘并继续该过程会得到令人惊讶的结果,即产品序列始终以个位数到达。

例如:

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;
}

你必须每次都分配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;
}

根据您的问题,您希望我我们找到2位数字

#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*/
}
}

首先,您必须在第一个循环之前初始化 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;
}