重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
两个数 组 a[N] , b[N] ,其 中 A[N] 的各 个元 素值 已知, 现给 b[i] 赋值 , b[i] =
创新互联是一家集网站建设,隆子企业网站建设,隆子品牌网站建设,网站定制,隆子网站建设报价,网络营销,网络优化,隆子网站推广为一体的创新建站企业,帮助传统企业提升企业形象加强企业竞争力。可充分满足这一群体相比中小企业更为丰富、高端、多元的互联网需求。同时我们时刻保持专业、时尚、前沿,时刻以成就客户成长自我,坚持不断学习、思考、沉淀、净化自己,让我们为更多的企业打造出实用型网站。
a[0]*a[1]*a[2]...*a[N-1]/a[i];
要求:
1. 不准用除法运算
2. 除了循环计数值,a[N],b[N]外,不准再用其他任何变量(包括局部变量,全局变量等)
3. 满足时间复杂度O(n),空间复杂度 O(1)。
此题,同上题:
解答:求 b=a[0]*a*...a[i- 1]*a*a[i+1]..*a[N-1]/a ,就是求:a[0]*a[1]*...a[i-1]*a[i+1]..*a[N -1]。
只是我把a[i]左边部分标示为left[i],b[i]右边部分标示为right[i];
实现代码:
[cpp] view plaincopy
#includeiostream
#includestdio.h
using namespace std;
void arrMul(int a[],int out[],int n)
{
int i;
int left=1,right=1;
for(i=0;in;i++)
out[i]=1;
for(i=0;in;i++)
{
out[i]*=left;//从0-n,逐个计算其左边值
out[n-1-i]*=right;//从n-0,逐个计算计算其右边值
left*=a[i];
right*=a[n-1-i];
}
}
//测试
int main()
{
int i;
int a[]={1,2,3,4,5,6};//总乘积720
int p[sizeof(a)/sizeof(int)];
arrMul(a,p,6);
for(i=0;i6;i++)
printf("%d ",p[i]);
//输出 720 360 240 180 144 120
return 0;
}
int sub(int x,int y);
int mul(int x,int y);
int div(int x,int y);
#include math.hgt;
#include stdio.hgt;
void main()
{
int a,b,c,d,e,f,g,h,i;
printf("XXXXXXXXXXXXXXX计算器");
printf("\n");
for(c=1;clt;=30;c++)
printf("*");
printf("\n");
printf("请输入一个整数");
printf("\n");
scanf("%d",a);
printf("\n");
for(c=1;clt;=30;c++)
printf("-");
printf("\n");
printf("请选择您要做的运算:1.+,2.-,3.*,4./5.abs,6.sqrt");
printf("\n");
for(c=1;clt;=30;c++)
printf("*");
printf("\n");
scanf("%d",d);
printf("\n");
if(d==5) (如果想做绝对值,就直接做abs函数(它是个库函数).做完后就goto"end"--也就是函数的最后.)
if(d==6) ;}(如果想做开平方,就直接做sqrt函数(它是个库函数).做完后就goto"end"--也就是函数的最后.)
printf("请再次输入一个整数"); (如果是做双目的就开始输入第二个数b)
printf("\n");
scanf("%d",b);
printf("\n");
switch(d)
{
case 1:add(a,b);break;
case 2:sub(a,b);break;
case 3:mul(a,b);break;
case 4:div(a,b);break;
default:printf("date input error,\n");
} end: printf("\n");}
int add(int x,int y)
{
int m;
m=x+y;
printf("%d",m);
return m;
}
int sub(int x,int y)
{
int m;
m=x-y;
printf("%d",m);
return m;
}
int mul(int x,int y)
{
int m;
m=x*y;
printf("%d",m);
return m;
}
int div(int x,int y)
{
int m;
m=x/y;
printf("%d",m);
return m;
}
(你试试看吧,应该可以,呵呵)
另外,虚机团上产品团购,超级便宜。
定义了一个函数叫mul,输入n作为参数,返回一个unsigned long类型的结果
大致看了一下你的要求 实在是太多了 我写了个 你自己看看满足了几个
#includestdio.h
int gcd(int n, int m)
{
if (m==0)
return n;
else
return gcd( m, n % m );
}
int mul( int m,int n )
{
return m * n/ gcd( m, n) ;
}
void main()
{
int a,b,c,d;
printf("please input two number\n");
scanf("%d,%d",a,b);
c=gcd(a,b);
d=mul(a,b);
printf("gcd:%d\t\n,mul:%d\n",c,d);
}
代表
mul=mul*i;
就是用左边表达式的值乘以右边的表达式的值,再赋给左边的表达式
3.000000
int mul(float x,float y)
数据类型是float ,而定义mul(float x,float y)函数时由于定义函数类型为int,故mul(a,b)的结果3.600000被强制转型为int类型,其值变成3,但输出时按照float类型输出,故结果为3.000000