C++编程题102计算一个数可以由几个平方和组成,没有输出NA

1.1计算一个数可以由几个平方和组成,没有输出NA

输入 17

输出1 16

输入 14

输出 1 4 9

#include<iostream>
#include<string>
#include<math.h>
#include<list>
using namespace std;

int function(int n, int a[], int len){
	int m;
	int n2=n;
	for(int i=0;i<len;i++){//找到该数的所有平方根组合,不保证平方和是原来的数 
		m = sqrt(n);
		a[i]=m*m;   //存储平方根m, m*m是平方 
		if(m*m==n)
			break;
		else if(m!=1){
			n=n-m*m;
		}else 
			break;
	}
	// 这部分把得到的平方和与元素比对是否相等 
	int sum=0; //变量一定要初始化 否则会出错 
	for(int i=0;i<len;i++){
		if(a[i]!='\0'){
			sum=sum+a[i];
		}
	}
	if(sum==n2) //相等输出平方组合 
		for(int i=len-1;i>=0;i--)
		{
			if(a[i]!='\0')
			{
				cout<<a[i]<<+" ";
			}	
		}
	else //不相等输出NA 
		cout<<"NA";
} 

int main(){
	int n;
	cin>>n;
	int len = sqrt(n);
	int ar[len];
	for(int i=0;i<len;i++){ //数组初始化为0  
		ar[i]=0;
	}
	function(n,ar,len);	//调用函数 
	return 0;
} 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值