四方定理:所有自然数最多只要4个数的平方和就可以表示,编写一个程序验证四方定理、
注意: sqrt(n)返回的值是浮点数类型,因此需要int的强制类型转换将其取整。
最后加一个“no”语句,只是为了保证程序的完整性或防止意外的出现。
#include<iostream> #include<cmath> using namespace std; int mode1(int n) { if((int)sqrt(n) * (int)sqrt(n)==n) { cout<<(int)sqrt(n)<<"*"<<(int)sqrt(n)<<"="<<n; return 1; } else return 0; } int mode2(int n) { for(int x=1;x<sqrt(n);x++) for(int y=x;y<sqrt(n);y++) { if(x*x+y*y==n) { cout<<x<<"*"<<x<<"+"<<y<<"*"<<y<<"="<<n; return 1; } } return 0; } int mode3(int n) { for(int x=1;x<sqrt(n);x++) for(int y=x;y<sqrt(n);y++) for(int z=y;z<sqrt(n);z++) { if(x*x+y*y+z*z==n) { cout<<x<<"*"<<x<<"+"<<y<<"*"<<y<<"+"<<z<<"*"<<z<<"="<<n; return 1; } } return 0; } int mode4(int n) { for(int x=1;x<sqrt(n);x++) for(int y=x;y<sqrt(n);y++) for(int z=y;z<sqrt(n);z++) for(int t=z;t<sqrt(n);t++) { if(x*x+y*y+z*z+t*t==n) { cout<<x<<"*"<<x<<"+"<<y<<"*"<<y<<"+"<<z<<"*"<<z<<"+"<<t<<"*"<<t<<"="<<n; return 1; } } return 0; } int main() { int n; cin>>n; if(mode1(n)) cout<<"yes"<<endl; else if(mode2(n)) cout<<"yes"<<endl; else if(mode3(n)) cout<<"yes"<<endl; else if(mode4(n)) cout<<"yes"<<endl; else cout<<"no"; return 0; }