我要自夸一句的是:迄今为止,狂一点古今中外,我没见过一本书在讲到union时举出我这么漂亮的例子。恰恰相反,老谭告诫说:这个成员进去了,就冲掉了原先的那个成员,云云。还自以为是地认定,union是用来节约内存的。其实,靠union来省内存,“大盐都得卖馊掉”。哪有Fortran的Equivalence()来得方便?
| |
我要自夸一句的是:迄今为止,狂一点古今中外,我没见过一本书在讲到union时举出我这么漂亮的例子。恰恰相反,老谭告诫说:这个成员进去了,就冲掉了原先的那个成员,云云。还自以为是地认定,union是用来节约内存的。其实,靠union来省内存,“大盐都得卖馊掉”。哪有Fortran的Equivalence()来得方便?
很抱歉那,我说的是上面这些话有点狂,至少我见过这样的例子,但是不知到在哪里.然后,对于你的题目我会思考了在做答复.
怎么听怎么舒坦。说实话,我还弄成功一个“超精度四则加函数运算”的系统。其精度达10进制144位!用了10000多条80386汇编+80387指令,后来又把它与TC++4.0嫁接起来了。所以有时讲话“大”了一些。今后一定谨记古训“满遭损、谦受益”,做一个好孩子。
我已经把第一个题写出来了,当然我不用UNION来写
#include <stdio.h>
#include <stdlib.h>
#define LONG 15 //精度
void Make(char *p);
void GetString(char *p);
void Compute(int *sum,char *number1,char *number2);
void main()
{
char string1[LONG];
char string2[LONG];
int temp;
int sum[LONG-1];
GetString(string1);
GetString(string2);
Make(string1);
Make(string2);
Compute(sum,string1,string2);
printf("The result is:");
for(temp=0;temp<LONG-1;temp++)
{
if(sum[temp]!=0)
printf("%d",sum[temp]);
}
printf("\n");
}
void Make(char *p){
int i,j;
for(i=0;p[i]>47;i++){
}
for(j=LONG-1;j>=0;j--,i--){
if(i<0){
p[j]=48;
}
else
p[j]=p[i];
}
}
void GetString(char *p){
printf("please input number2:");
for(int temp=0;temp<LONG-1;temp++){
scanf("%c",&p[temp]);
if(p[temp]<=47){
p[temp]=0;
break;
}
}
}
void Compute(int *sum,char *number1,char *number2){
int i[LONG-1],j[LONG-1];
for(int temp=0;temp<LONG-1;temp++){
i[temp]=number1[temp]-48;
j[temp]=number2[temp]-48;
sum[temp]=(i[temp]+j[temp])%10;
sum[temp-1]=sum[temp-1]+(i[temp]+j[temp])/10;
}
}