循环语句:用来将数字进行除法运算

3

我在C++方面是个业余爱好者,但我已经接到了一项超出我的知识范围的任务。

任务是输入数字n和m。程序必须将其作为区间,检查其中是否有任何一个数字是具有相同指数的数字之和。

编辑:(18.10.15) 结果发现我没有正确理解我的任务。下面是任务:

“用户输入两个数字。程序将它们作为区间,在其中检查所有数字。如果在区间中存在一个数字,其所有位数的相同指数之和等于该数字,则程序显示该数字。”

例如,我输入100和200。在这个区间中有153。 153 = 1^3 + 5^3 + 3^3 (1+125+27) 程序显示153。

cin >> n;
cin >> m;
    for (int i=n; i<=m; i++)
    {
        for (int k=n; k<=i; k++)
        {
                a = n % 10; //for example, I enter 153, then a=3
                f = n /= 10; //f=15
                b = f % 10;  //b=5
                f = f /= 10; //f=1
                c = f % 10; //c=1
                f = f /= 10;
                d = f % 10;

                for (int j=1; j<=5; j++)
                {
                    a = a * a;
                    b = b * b;
                    c = c * c;
                    d = d * d;
                    if (a + b + c + d == n)
                    {
                        cout << n << endl;
                    }
                }
        }
    }

非常感谢您的帮助。


查找pow函数以计算指数值。 - Thomas Matthews
程序中的项数和指数是输入还是需要进行搜索? - molbdnilo
我不明白这个问题。任何范围内的数字都可以被看作是具有相同指数的数字之和。而这些指数有着无限种不同的版本。 - Shoe
Matthew,这是完整的任务吗?它看起来像是一道家庭作业问题,但你好像漏掉了一些信息。首先,每个数字都需要独一无二吗?其次,你需要程序返回什么? - nick
3个回答

1
任务是输入数字n,m。程序必须将其作为一个区间,检查是否有任何数字是具有相同指数的数字之和。
假设范围给定为[n,m),那么这是您的程序:
return (n != m);

任何数都可以看作是具有相同指数的数字之和。例如:
0 = 0 ^ 3 + 0 ^ 3 + 0 ^ 3
1 = 1 ^ 3 + 0 ^ 3
2 = 1 ^ 3 + 1 ^ 3
3 = 1 ^ 3 + 1 ^ 3 + 1 ^ 3

即使是负数,对于任何非空范围,都存在至少一个这样的数字。

因此,在任何非空范围中,至少存在一个这样的数字。


0

抱歉我回答迟了并且我没有清楚表达我的问题 - 英语不是我的母语。

但事实证明我没有正确理解我的任务。 这是它:

“用户输入两个数字。程序将其作为检查所有数字的区间。 如果在区间内有一个数字,使得该数字的每个数字的指数之和相同,则程序显示该数字。”

例如,我输入100和200。 在此区间中有153。 153 = 1 ^ 3 + 5 ^ 3 + 3 ^ 3(1 + 125 + 27) 程序显示153。

cin >> n;
cin >> m;
    for (int i=n; i<=m; i++)
    {
        for (int k=n; k<=i; k++)
        {
                a = n % 10; //for example, I enter 153, then a=3
                f = n /= 10; //f=15
                b = f % 10;  //b=5
                f = f /= 10; //f=1
                c = f % 10; //c=1
                f = f /= 10;
                d = f % 10;

                for (int j=1; j<=5; j++)
                {
                    a = a * a;
                    b = b * b;
                    c = c * c;
                    d = d * d;
                    if (a + b + c + d == n)
                    {
                        cout << n << endl;
                    }
                }
        }
    }

0

“我知道的就是如何让程序逐个检查每个数字” “程序不能使用数组。”

    for (int i = n; i <= m; i++) {
        ...
        int x = (int)Math.log10(i);
        int rest = i;
        for (int p = x; p>=0; p--) {
            int digit = rest / (int)Math.pow(10,p);
            rest = i % (int)Math.pow(10,p);

            //3802 = 3*10^3 + 8*10^2 + 0*10^1 + 2*10^0 
        }
    }

    ...

对不起,是Java而不是C++


检查是否有任何数字是由具有相同指数的数字之和。在您的示例3*10^3 + 8*10^2 + 0*10^1 + 2*10^0中,它们没有相同的指数。 :) - Shoe
OP的问题表述得很糟糕,但我认为他想让所有指数匹配。 - nick
这是可能的,但我已经遵循了该语句 ;-) “我知道的就是如何让程序逐个检查每个数字” “程序不能使用数组。” - juankirr

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接