C++ 整数的乘法持久性

C++ 整数的乘法持久性,c++,C++,我正在尝试编写一个代码,该代码执行以下操作: 将一个整数的位数相乘并继续这个过程会得到一个令人惊讶的结果,即乘积序列总是到达一个位数 例如: 715->35->15->5 88->64->24->8 27->14->4 达到一位数所需的产品数称为该整数的持久性数。因此,715和88的持久性数为3,而27的持久性数为2。制作一个程序来查找唯一的持久性大于3的两位数 我能想出一个粗略的想法,代码如下,但似乎不起作用: #include <iostream> using namespac

我正在尝试编写一个代码,该代码执行以下操作:

将一个整数的位数相乘并继续这个过程会得到一个令人惊讶的结果,即乘积序列总是到达一个位数

例如:

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;
}
#包括
使用名称空间std;
/*
* 
*/
int PersistentNum(整数位数)
{
int x;
int pers=0;
int y=1;
而(x>9)
{
做{
x=数字%10;
y=y*位;
x=x/10;
}而(x>0);
pers++;
x=y;
}
返回者;
}
int main()
{
INTREPNUM;
int持续存在;
cout>repNum;
Persist=PersistentNum(repNum);

cout您每次都必须分配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;
}
#包括
使用名称空间std;
/*
* 
*/
intpersistentnum(intx)
{
整数位数;
int pers=0;
int y=1;
而(x>9)
{
y=1;
做{
数字=x%10;
y=y*位;
x=x/10;
}而(x>0);
pers++;
x=y;
}
返回者;
}
int main()
{
INTREPNUM;
int持续存在;
库特普南;
Persist=PersistentNum(repNum);

根据你的问题,你想让我找出两位数的数字吗

#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*/
  }
   }
#包括
使用名称空间std;
int main()
{int y;int z;int temp;int n;
对于(int x=10;x9){
y=x%10;
z=x/10;
x=y*z;温度++;
}
x=n;
如果(温度>3){

cout首先,您必须在第一个循环之前初始化x,或者只使用
do

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;
}
intpersistentnum(intnumber)
{
整数位数,pers=0,curr_num;
做{
curr_num=1;
做{
数字=数字%10;
curr_num=curr_num*位;
数字=数字/10;
}而(数量>0);

请详细说明你所说的“似乎不起作用”是什么意思好吗。您想要查找持久性大于3的两位数的代码,对吗?但是最大的两位数是99,根据您的定义,它的持久性99->81->8是2。因此,无需编写code@GaneshChowdharySadanala用88试试看。@Rags他问persistence大于3,但88的persistence等于3,77的persistence等于3,所以我分配了y,但现在无论输入是什么,它都输出1:while(数字>9){y=1;do{x=digit%10;y=digit*y;x=x/10;}while(x>0);pers++;x=y;return pers;}