51中怎么计算350×350
51中怎么计算350×350 我试了下会不行啊 强制类型转换到16位再计算其实也可以用高精度 aheadlead 发表于 2012-8-7 16:08 static/image/common/back.gif
强制类型转换到16位再计算
其实也可以用高精度
16位 装不下 350*350 350*350=350*(256+64+32-2) 本帖最后由 aheadlead 于 2012-8-7 16:26 编辑
GNMXD 发表于 2012-8-7 16:16 static/image/common/back.gif
16位 装不下 350*350
如果32位不行的话考虑高精度
还可以从汇编的角度考虑(不过我不会...) lbhj310 发表于 2012-8-7 16:18 static/image/common/back.gif
350*350=350*(256+64+32-2)
这个不错 写个ulong × ulong的子程序啊。 了解了 问题现在解决了 怎么解决的?用大正数算法吗?我觉得太麻烦了,对51的负荷也大。楼主怎么解决的? 以前在poj上写过,不过账号忘了。
#include<stdio.h>
#include<string.h>
void chengfa(char *a,char*b)
{
char c;
int fuhao1,fuhao2;
if(a == '-' || a == '+') {
if(a == '-')
fuhao1 = -1;
else fuhao1 = 1;
strcpy(c,a+1);
strcpy(a,c);
}
if(b == '-' || b == '+') {
if(b == '-')
fuhao2 = -1;
else fuhao2 = 1;
strcpy(c,b+1);
strcpy(b,c);
}
int i , j;
for(i = 0; i< 10000;i++){
c = '0';
}
int lena = strlen(a);
int lenb = strlen(b);
for(i = lena-1;i >=0;i--){
int k = 0;
for(j = lenb-1;j >=0;j--) {
char l = c;
c = (c-'0'+(b-'0')*(a-'0')+k)%10+'0';
k = (l-'0'+(b-'0') * (a -'0')+k)/10;
}
if(k!= 0) c += k;
}
i = 0;
j = 0;
while(c == '0') i++;
while(i <= lena+lenb-1) {
a = c;
j ++;
i ++;
}
a = '\0';
if(a == '\0') a = '0',a = '\0';
if(fuhao1*fuhao2 == -1 && a !='0') {
strcpy(c,a);
a = '-';
a = '\0';
strcat(a,c);
}
}
int main()
{
char a,b;
while(scanf("%s %s",a,b) == 2) {
chengfa(a,b);
printf("%s\n",a);
}
}
刚学51,但觉得51用这种算法会不会很浪费? 不太理解楼主的意思。
u32 a = 350;
u32 b = 350;
u32 c = 0;
c = a * b;
??? 本帖最后由 yangshichang110 于 2012-8-8 12:21 编辑
wallelectronics 发表于 2012-8-8 11:56 static/image/common/back.gif
不太理解楼主的意思。
u32 a = 350;
加上不同的修饰符, 整型数有以下几种类型;
signed short int 有符号短整型数说明。简写为short或int, 字长为2
字节共16位二进制数, 数的范围是-32768~32767。
signed long int 有符号长整型数说明。简写为long, 字长为4字节共
32位二进制数, 数的范围是-2147483648~2147483647。
unsigned short int 无符号短整型数说明。简写为unsigned int, 字长
为2字节共16位二进制数, 数的范围是0~65535。
unsigned long int 无符号长整型数说明。简写为unsigned long, 字长
为4字节共32位二进制数, 数的范围是0~4294967295。
LZ的意思是,350*350=12250
大于了整数范围。
好像单片机C没有unsigned long int吧。
好像是有的,回家试试。 yangshichang110 发表于 2012-8-8 12:10 static/image/common/back.gif
加上不同的修饰符, 整型数有以下几种类型;
signed short int 有符号短整型数说明。简写为short或int, 字 ...
{:sweat:} 没有long int吗??
反正我天天用u32 s32 fp32......{:sweat:} 用ULONG,别用高精,内存伤不起。 wallelectronics 发表于 2012-8-8 12:25 static/image/common/back.gif
没有long int吗??
反正我天天用u32 s32 fp32......
= =你没事开这么大整数做什么...
我一般开的好保守的,以前觉得这是好习惯。。。
现在发现,经常到后面要改定义= =
一般51,开内存,应该怎么算,知道能开多少ulong之类的? 我不是没事开那么大的整数,24位AD其他数据类型能放得下么?{:lol:}
页:
[1]