C++自守数判断

题目描述:

一个数的平方的“尾数”含有本身的话,那么称这个数为自守数,如:
25^2=625, 625尾数为25,那么25为自守数,
76^2=5776, 5776的尾数为76,那么76为自守数,
376^2=141376,14376的尾数为376,那么376为自守数(注意对尾数的理解)
## input:0到1000这样的数
#思路一:循环控制,取余数比较,相等则输出,关键问题是余数取到第几位停止
举个例子:25^2=625,怎样控制才取两位余数呢?
376^2=141376,取三位?
拿25^2=625来说,只需将25转为string型,记为s1=“25”,再用625%pow(10,s1.size())得到的数和25比较

#include 
#include 
#include 
using namespace std;
int main(){
	for(int i=1;i<=1000;i++){
	        int sum1=pow(i,2);
	        string s1=to_string(i); 
	        int h=pow(10,s1.size());
	        if(sum1%h==i){
	            cout<<i<<endl;
	        }
	    }
}

#思路二:直接转化为字符串进行比较

#include 
#include 
#include 
using namespace std;
int main(){
	for(int i=1;i<=10000;i++){
	        int sum1=pow(i,2);
	        string s1=to_string(sum1);
	        string s2=to_string(i);
	        auto m1=s1.size();
	        auto m2=s2.size();
	        if(s1.compare(m1-m2,m1,s2,0,m1)==0){
	            cout<<s2<<endl;
	        }
	    }
}

#思路三:你能看懂算我输?

#include 
#include 
#include 
using namespace std;
bool ZiShou(int num){
    int sum1=pow(num,2);
    int sum2=0;
    int i=0;
    bool zishou=false;
    while(sum1){
        int yu=sum1%10;
        sum2+=yu*pow(10,i);
        i++;
        sum1/=10;
        if(sum2==num){
            zishou=true;
            break;
        }else if(sum2>num){
            break;
        }
    }
    return zishou;
}
int main(){
    for(int i=1;i<10000;i++){
        if(ZiShou(i)){
            cout<<i<<endl;
        }
    }
     return 0;
}

#答案:
C++自守数判断_第1张图片
欢迎在评论区留言讨论,如果觉得写的不错,那就请关注一下吧?

你可能感兴趣的:(C++初学者算法题目)