Smith数

/**  对于一个正整数n,如果它的各位之和等于它的所有质因数的各位之和,
 **  则该数被称为Smith数。例如,31257=3*3*23*151,31257 的各位数字之和为
 **3+1+2+5+7=18,它的所有质因数的各位数字之和为3+3+2+3+1+5+1=18,因此,
 **31257是一个Smith数。编写一个程序判断输入的正整数是不是Smith数。
 */
#include<iostream>
#include<string>
#include<vector>        //包含头文件
using namespace std;
int sum(int n);         //求一个数的各位之和
int main()
{
    vector<string> s;   //声明一个string类型的向量
    vector<string>::iterator it;//声明迭代器
    int n,i;
    int t1,t2,t=0;
    cin>>n;             //输入要分析的数
    while(n)
    {
        int j=n;
        t1=sum(n);      //保存欲分析的数的各位之和
        for(i=2; i<n; )
        {
            if(n%i==0)  //i是n的质数
            {
                t=t+sum(i);//保存所有质数的各位之和
                n=n/10;
            }
            else
            {
                ++i;
            }
        }
        t2=t+sum(n);
        if(t1==t2&&n<j) //是Smith数的判断条件
            s.push_back("yes");
        else
            s.push_back("No");
        t=0;
        cin>>n;
    }
    for(it=s.begin(); it<s.end(); ++it)  //迭代器指向s向量
    {
        cout<<(*it)<<endl;               //迭代器是一个指针
    }
    return 0;
}
int sum(int n)
{
    int sum=0;
    for(; n>0; n=n/10)
    {
        sum+=n%10;
    }
    return sum;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值