注册 登录
编程论坛 C++教室

c++同构数问题

风雨123 发布于 2013-02-24 13:10, 1287 次点击
请各位解释一下,谢谢。
所谓“同构数”是指这样一个数,它出现在它的平方数的右侧,例如5的平方是25,25的平方是625,故5和25都是同构数,求[x,y]之间所有同构数之和。x,y由键盘输入。

输入样例:

2 1000

输出样例:

1113

 

13 回复
#2
Susake2013-02-24 13:53
程序代码:
#include <iostream>
using namespace std;

int main() {
    int a, b, sum = 0, s, i;
    cin>>a>>b;
    for(i = a; i <= b; i++) {
        if(i * i * i * i <= b)
        {
            s = i + i * i;
            sum += s;
        }
    }
    cout<<sum<<endl;
    return 0;
}
不晓得哪里还有问题....出太阳了,出去溜达去....
#3
Susake2013-02-24 13:57
还有你的答案应该有问题哪里会可能那么大...100 81 64 49 36 25 16 9 4。。。。。10 9 8 7 6 5 4 3 2 1
#4
Susake2013-02-24 13:59
不是应该更小5---25 ----625
            4---16-----。。。
            。。。。。
30 + 20 + 。。。=
#5
风雨1232013-02-24 14:28
这个怎么做的求解释啊
#6
风雨1232013-02-24 14:29
你是用什么方法???
#7
Susake2013-02-24 14:53
程序代码:
#include <iostream>
using namespace std;

int main() {
    int a, b, sum = 0, s, i;
    cin>>a>>b;
    for(i = a; i <= 50; i++) {
        if(i * i * i * i <= b)
        {
            s = i + i * i;
            sum += s;
        }
    }
    cout<<sum<<endl;
    return 0;
}
#8
Susake2013-02-24 14:56
不就是判断一下?   既然i*i*i*i<=b,那么自然有i*i且<b,自然有i
#9
风雨1232013-02-24 17:21
我知道了#include
using namespace std;
int main()
{
    int  x,y,i,n=0;long s=0,v;
    cin>>x>>y;
    for(x;x<=y;x++)
    {  i=10;
        v=x*x;
        while(v/i!=0)
        {
            if(v%i==x)
            {
                n=1;
                break;
            }
            i=i*10;
        }
        if(n==1)
            s+=x;
        n=0;i=10;


    }
    cout<<s<<endl;
return 0;
}


[ 本帖最后由 风雨123 于 2013-2-25 11:22 编辑 ]
#10
Susake2013-02-24 17:26
???
#11
fanpengpeng2013-02-24 19:51
回复 9楼 风雨123
对的, 用取余的方式判断是否是同构数 应该是最好的方法
不过 还有一点的可以改进的地方 就是取余的基数 可以用一个参数传给函数 在x累加后位数多了一位时 将这个基数*10
而不需要每次都从10 100 1000 等一个一个判断 这个在x y 位数特别多时 会很有效
下面是我写的代码 不知道对你有没有帮助
程序代码:

#include <iostream>

using namespace std;

bool is_tgnum(int num, int base)
{
    return (num*num)%base == num;
}

int main()
{
    int x, y, sum = 0;
   
    cin >> x >> y;
    for(int num(x), base(10); num <= y; num++){
        while(num/base) base *= 10;
        if(is_tgnum(num, base)) sum += num;
    }
    cout << "The sum is " << sum << " ." << endl;
}
#12
zhi1212774662013-03-05 18:09
#include<iostream>
using namespace std;
int main()
{
    long a,b,i,sum=0,k=10;
    cin>>a>>b;
    for(i=a;i<=b;i++)
    {
        if(i==k) k*=k;
        if(i==(i*i)%k)
        {    sum+=i;
            cout<<i<<endl;
        }
   
    }
    cout<<"和为:"<<sum<<endl;

}
#13
明天更好山鹰2013-03-15 10:08
回复 12楼 zhi121277466
需要返回,得再加上return 0;才可以。
#14
明天更好山鹰2013-03-15 10:15
但是结果不对哦!
这句有问题 if(i==k) k*=k;
1