求解c++编程问题

试定义一个类NUM,验证下列命题是否成立:任意一个正整数与其反序数相加,得到一个新的正整数,再对这个新的正整数重复上述步骤,最终一定可以得到一个回文数。具体要求如下:(1... 试定义一个类NUM,验证下列命题是否成立:任意一个正整数与其反序数相加,得到一个新的正整数,再对这个新的正整数重复上述步骤,最终一定可以得到一个回文数。具体要求如下:

(1)私有数据成员

l int num :存放用于验证命题的正整数。

(2)公有成员函数

l NUM(int x):构造函数,用x初始化数据成员num,设置flag的初值为0。

l void set(int a):将num的值设置为a。

l int yn(int n):返回n的反序数,如n为1234,则其反序数为4321。

l void fun():使用num验证命题是否成立,并显示验证过程。

(3)在主函数中对该类进行测试。

输出示例:

num=350的验证过程如下:

350+53=403

403+304=707

707=707

命题成立!

num=2015的验证过程如下:

2015+5102=7117

7117=7117

命题成立!
展开
 我来答
taobingxue
2020-05-28 · TA获得超过2.3万个赞
知道大有可为答主
回答量:1148
采纳率:80%
帮助的人:889万
展开全部

代码如下,注意运行的时候输入的数字不能太大,否则验证的时候有可能爆int

#include <iostream>


using namespace std;


class NUM{

public:

    int num;

    

    NUM(int x): num(x) {}

    

    void set(int a) {

        num = a;

    }

    

    const int yn(int n) {

        int ans = 0;

        int tmp = n / 10;

        int idx = 1;

        for (; tmp > 0; tmp /= 10) idx *= 10;

        for (; n > 0; n /= 10) {

            ans += idx * (n % 10);

            idx /= 10;

        }

        return ans;

    }

    

    const void fun() {

        printf("num=%d的验证过程如下:\n", num);

        int a = num, b = yn(num);

        while (a != b) {

            printf("%d+%d=%d\n", a, b, a+b);

            a = a + b;

            b = yn(a);

        }

        printf("%d=%d\n命题成立!\n", a, b);

    }

};


int main(int argc, char **argv) {

    NUM num(0);

    int n;

    while (true) {

        scanf("%d", &n);

        num.set(n);

        num.fun();

    }

return 0;

}


运行结果如下:

推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式