判断同构数(C++)

判断同构数 问题描述给定一个十进制正整数,判断其是否为同构数。所谓同构数是这样的一些数,它出现在其平方数的右边,例如5是 右边的数,25是 右边的数,所以5和25都是同构数。输入输入数据有若干行。每行上有一个正整数,对应一种情形。输出对于每一种情形,先输出“Case #:”(#为序号,从1起),然后输出n,逗号,结果(Yes或No),换行。输入样例51525输出样例Case 1: 5, YesCase 2: 15, NoCase 3: 25, Yes

pow函数使用有问题。

Math库里的pow函数的返回类型是一个精度浮点数。

你在isomorphism函数中直接另mod为整型

实际上损失了你后来的pow(10,a)的精度。

就比如说pow(10,2)的返回值是一个99.xxxxxxx的数,然后你直接int了,所以在位数等于2时,你的mod就变成99了。

我们看下面这段代码:

运行结果为两个1,说明的确在你位数等于2的时候,你mod是99而不是100。

所以有一个改进建议就是

if(isomorphism(i,pow(10,a)))

改成

if(isomorphism(i,(pow(10,a)+0.5)))

有疑问请追问叭。

温馨提示:答案为网友推荐,仅供参考
第1个回答  2013-05-15
//判断是否是同构数的一个函数,原创的哦。。。int jiegou(int i)
{
int y,j,n,x(0),m[3],k[3];
y = i;
int sign = 1;
n = y * y;
while (y != 0)//将末尾的数依依赋值到两个数组中
{
m[x] = y % 10;
k[x] = n % 10;
x++;
y = y / 10;
n = n / 10;
}
for (j = 0; j < x; j++)//判断是否相等
{
if (m[j] != k[j])
{
sign = -1;
break;
}
}
if (sign == 1)
return 1;
else return -1;
}//如果是同构数则返回1不然回-1
第2个回答  推荐于2018-05-07
#include <iostream>
#include<cmath>
using namespace std;
int main()
{
int n,t,m,c=1;
while(cin>>n)
{
t=n;
m=0;
while(t)
{
m++;
t/=10;
}
t=n*n;
cout<<"Case "<<c++<<":"<<n<<", ";
if((t-n)%(int)pow(10,(double)m)==0)
cout<<"Yes"<<endl;
else
cout<<"No"<<endl;
}
}本回答被网友采纳
相似回答