整数的持续性

时间:2018-10-19 15:17:02

标签: c++

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

将整数与数字相乘并继续进行过程,得出令人惊讶的结果,即乘积序列始终到达单个数字。

例如:

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

3 个答案:

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