用C语言编,有两个正整数a和b,已知a*b=2048,求a,b各为何值时,a+b的值最小

如题

#include<stdio.h>
#include<math.h>
main()
{
int a=0, b=0,min=2048,num_a,num_b;
for (a = 1; a <= sqrt(2048); a++)
{
if (2048%a == 0)
{
b=2048/a;
if(min>a+b)
{
min = a + b;
num_a=a;
num_b=b;
}
}
}
printf("%d %d\n",num_a,num_b);
}
答案是32和64.
温馨提示:答案为网友推荐,仅供参考
第1个回答  2008-11-11
int a=0, b=0,min=2048;
for (a = 1, b = 2048 / a; a <= sqrt(2048); a++)
{
if (a * b == 2048)
{
if(min>a+b)
{
min = a + b;
}

}
}
第2个回答  2008-11-11
//可以看出来最接近平方根的乘积组合的和是最小的,下面最一般的做法
#include<stdio.h>
#include<math.h>
void main()
{
int i,j,k,sum[3]={0};

k=(int)sqrt(2048);
sum[2]=2048;
for(i=1;i<=k;i++)
if(2048%i == 0)
{
j=2048/i;
printf("%d,%d\n",i,j);//乘机是2048的都打印出来
if((j+i)<sum[2])
{
sum[2] = j+i;
sum[1] = j;
sum[0] = i;
}
}
printf("\n%d,%d\n",sum[0],sum[1]); //和最小的打印出来
}