写到是可以写,但是万一被选上出题,而我有没什么时间,就不好办了.
我也想看一下高手是怎么写的.
你要有事情,我选别人就可以了
出题目真的没有什么意思,就象我们老师一样,一个人在讲台上讲的津津有味,
[此贴子已经被作者于2007-4-14 22:26:22编辑过]
这个地方看不大懂,你能不能说一下
NUMBER *multiply(NUMBER *opn1, NUMBER *opn2)
{
int n = opn1->length;
unsigned long *u = opn1->data;
int m = opn2->length;
unsigned long *v = opn2->data;
int mn = m + n;
unsigned long carry, temp;
int i, j;
unsigned long w[N];
memset(w, 0, sizeof(w));
for (i = 0; i < n; i++)
if (u[i] != 0)
{
for (carry = 0, j = 0; j < m; j++)/u,和v都是定义为指针这里怎么可以用做数组
{
temp = u[i]*v[j] + w[i+j] +carry;/接下来几个表达式子不明白
w[i+j] = temp % BASE;
carry = temp / BASE;
}
w[i+j] = carry;
}
for (; w[mn-1] == 0; mn--)
;
memset (opn1->data, 0, N*sizeof(unsigned long));
opn1->length = mn;
memmove(opn1->data, w, mn*sizeof(unsigned long));
return opn1;
}
大家参考一下
第一个题目
#include <stdio.h>
int main()
{
unsigned long x,y,m,n,l;
while (scanf ("%ld %ld %ld %ld %ld",&x,&y,&m,&n,&l)!=EOF)
{
if (m>n)
{
m=m-n;
x=(y-x+l)%l;
}
else
{
m=n-m;
x=(x-y+l)%l;
}
n=x/m;
x=x%m;
y=x;
while (1)
{
if (y==0)
{
printf ("%d\n",n);
break;
}
n+=(y+l)/m;
y=(y+l)%m;
if (y==x)
{
printf ("Impossible\n");
break;
}
}
}
return 0;
}
第二个
#include<stdio.h>
void main()
{
char s[7];
int i,j,n,m,k,flag;
long int a[100]={0};
char st[395]={'0'};
a[0]=1;
while(scanf("%s %d",s,&n)!=EOF)
{
for(i=0;i<100;i++)
a[i]=0;
for(i=0;i<396;i++)
st[i]='\0';
st[0]='0';
a[0]=1;
m=0;
j=1;
flag=-1;
for(i=0;s[i];i++);
k=i-1;
for(i--;i>=0;i--)
{
if(s[i]=='.')
{
flag=(k-i)*n;
continue;
}
else
{
m+=(s[i]-'0')*j;
j*=10;
}
}
while(n--)
{
for(i=0;i<100;i++)
a[i]*=m;
for(i=0;i<100;i++)
{
a[i+1]=a[i+1]+(a[i]/10000);
a[i]=a[i]%10000;
}
}
for(i=0,k=0;i<99;i++,k+=4)
{
st[k+3]=a[i]/1000+'0';
a[i]%=1000;
st[k+2]=a[i]/100+'0';
a[i]%=100;
st[k+1]=a[i]/10+'0';
a[i]%=10;
st[k]=a[i]+'0';
}
for(i=395;i>=flag;i--)
{
if(st[i]!='0')
break;
}
for(j=0;j<flag;j++)
{
if(st[j]!='0')
break;
}
if(i<j)
printf("0\n");
else
{
for(i;i>=j;i--)
{
if(i==flag-1)
printf(".");
printf("%c",st[i]);
}
printf("\n");
}
}
}