336 条题解
-
0wzc1995 LV 10 @ 2009-03-03 23:16:58
编译通过...
├ 测试数据 01:答案正确... 0ms
├ 测试数据 02:答案正确... 0ms
├ 测试数据 03:答案正确... 0ms
├ 测试数据 04:答案正确... 0ms
---|---|---|---|---|---|---|---|-
Accepted 有效得分:100 有效耗时:0ms10000位压位,一次AC,秒杀……
#include "stdio.h"
#include "string.h"
int main()
{ char a[10005],b[10005];
int x[10005]={0},y[10005]={0},s[20015]={0},i,j,n,m,d=0,t=0,t1=0,len;
scanf("%s%s",a,b);
n=strlen(a);
m=strlen(b);
for(i=n-4;i>=0;i-=4)
x[t++]=(a[i]-'0')*1000+(a-'0')*100+(a-'0')*10+(a-'0')*1;
if(n-t*4==3)
x[t]=(a[0]-'0')*100+(a[1]-'0')*10+(a[2]-'0')*1;
else
if(n-t*4==2)
x[t]=(a[0]-'0')*10+(a[1]-'0')*1;
else
if(n-t*4==1)
x[t]=a[0]-'0';
for(j=m-4;j>=0;j-=4)
y[t1++]=(b[j]-'0')*1000+(b[j+1]-'0')*100+(b[j+2]-'0')*10+(b[j+3]-'0')*1;
if(m-t*4==3)
y[t1]=(b[0]-'0')*100+(b[1]-'0')*10+(b[2]-'0')*1;
else
if(m-t*4==2)
y[t1]=(b[0]-'0')*10+(b[1]-'0')*1;
else
if(m-t*4==1)
y[t1]=b[0]-'0';
for(i=0;i=0;i--,t1++)
if(b[i]!=0)
break;
for(i=len;i>=0;i--)
{
if(i==len)
printf("%d",s[i]);
else
printf("%.4d",s[i]);
}
return 0;
} -
02009-11-13 15:32:13@
type arra=array[-3..10000]of longint;
var a,b,c:arra;
m,n,next,l1,l2,l3:longint;
procedure init(var m:arra;var lo:longint);
var k:array[-4..10000]of char;
q:array[-3..10000]of longint;
l,i,j,z,p:longint;
s:string;
begin
l:=0;
fillchar(m,sizeof(m),0);
while not(eoln) do
begin
inc(l);
read(k[l]);
end;
for i:=-4 to 0 do k[i]:='0';
for i:=1 to (l div 3)+1 do
begin
s:='000';
z:=1;
for j:=l-i*3+1 to l-(i-1)*3 do
begin
s[z]:=k[j];
inc(z);
end;
val(s,q[i]);
end;
readln;
lo:=(l div 3)+1;
m:=q;
end;
procedure multiplied(a,b:arra;l1,l2:longint);
var i,j:longint;
s:string;
begin
l3:=l1+l2;
next:=0;
fillchar(c,sizeof(c),0);
for i:=1 to l1 do
for j:=1 to l2 do
begin
c:=a[i]*b[j]+c;
if c>=1000 then
begin
c:=c+c div 1000;
c:=c mod 1000;
if i+j>l3 then inc(l3);
end;
end;
while c[l3]=0 do dec(l3);
write(c[l3]);
for i:=l3-1 downto 1 do
begin
str(c[i],s);
while length(s) -
02009-02-05 21:53:36@
高精 压位啊
-
02009-02-05 21:23:06@
测试数据怎么大的题也能审核通过???!!!
-
02009-02-04 15:14:58@
修改一下下就行了,同学也是这样做,为什么我偏偏错了?
var i,j,l1,l2,m,g:longint;
s1,s2:ansistring;
a,b:array[0..500] of integer;
begin
readln(s1);
readln(s2);
l1:=length(s1); l2:=length(s2);
for i:=1 to l1 do val(s1[i],a[i],g);
for i:=1 to l2 do val(s2[i],b[i],g);
for i:=1 to l1 do
for j:=1 to 500 do
begin
m:=a[i]*b[j]+g;
a[i]:=m mod 10;
g:=m div 10;
end;
j:=1000;
while a[j]=0 do j:=j-1;
for i:=1 to j do write(a[i]);
end. -
02009-01-28 18:51:51@
原来以为是自己高精度写错了
结果果然是自己高精度写错了
现在竟然还是不知道自己怎么写错的
可是自己的那套写法写了很多题目都没有问题
我只想说……faint -
02009-01-26 22:24:07@
#include
#include
char str1[10001],str2[10001];
long len1,len2,alen,blen,clen;
long a[3340],b[3340],c[6680];
long i,j,k,n,m;
long s,t;
int main(){
gets(str1);gets(str2);
alen=0;
len1=strlen(str1);
for (i=len1-1;i>=0;i=s-1){
s=i-2; t=i;
if (s -
02009-01-24 18:05:36@
水题……囧了……多打了个0……囧了4次0分。
看本人的100000000进制数!
{——————————————————————————————————}编译通过...
├ 测试数据 01:答案正确... 0ms
├ 测试数据 02:答案正确... 0ms
├ 测试数据 03:答案正确... 0ms
├ 测试数据 04:答案正确... 0ms
---|---|---|---|---|---|---|---|-
Accepted 有效得分:100 有效耗时:0msvar
s1,s2:ansistring;
len,l1,l2,i,j:longint;
a,b,c:array[0..20000]of qword;
begin
fillchar(a,sizeof(a),0);
fillchar(b,sizeof(b),0);
fillchar(c,sizeof(c),0);
readln(s1);
readln(s2);
l1:=length(s1);
l2:=length(s2);
for i:=1 to l1 do
begin
j:=(l1-i) div 8+1;
a[j]:=a[j]*10+ord(s1[i])-48;
end;
for i:=1 to l2 do
begin
j:=(l2-i) div 8+1;
b[j]:=b[j]*10+ord(s2[i])-48;
end;
l1:=l1 div 8+1;
l2:=l2 div 8+1;
len:=l1+l2;
for i:=1 to l1 do
for j:=1 to l2 do
c:=a[i]*b[j]+c;
for i:=2 to len do
begin
c[i]:=c[i]+c div 100000000;
c:=c mod 100000000;
end;
while c[len+1]>0 do inc(len);
while c[len]=0 do dec(len);
write(c[len]);
for i:=len-1 downto 1 do
write(c[i] div 10000000,
(c[i] div 1000000) mod 10,
(c[i] div 100000) mod 10,
(c[i] div 10000) mod 10,
(c[i] div 1000) mod 10,
(c[i] div 100) mod 10,
(c[i] div 10) mod 10,
c[i] mod 10);
end.Flag Accepted
题号 P1040
类型(?) 数论 / 数值
通过 2236人
提交 13959次
通过率 16%
难度 3提交 讨论 题解
-
02009-01-17 10:56:55@
做完这题我好恶心……
-
02008-12-21 14:15:57@
编译通过...
├ 测试数据 01:答案正确... 0ms
├ 测试数据 02:答案正确... 0ms
├ 测试数据 03:答案正确... 0ms
├ 测试数据 04:答案错误...
├ Hint: WA ├ 标准行输出
├ 错误行输出
---|---|---|---|---|---|---|---|-program xaq;
type
atype=array[0..100000]of integer;
var
a,b,c:atype;
s:ansistring;
len1,len2,i,j,k:integer;
begin
readln(s);
len1:=length(s);
for i:=0 to len1-1 do
a[len1-i-1]:=ord(s)-48;
readln(s);
len2:=length(s);
for i:=0 to len2-1 do
b[len2-i-1]:=ord(s)-48;
for i:=len1-1 downto 0 do
begin
for j:=len2-1 downto 0 do
c:=c+a[i]*b[j];
end;
k:=len1+len2-1;
for i:=0 to k-1 do
begin
c:=c+c[i]div 10;
c[i]:=c[i] mod 10;
end;
if c[k]0 then k:=k+1;
for i:=k-1 downto 0 do write(c[i]);
end.哪里错了?????????????????????????????????
-
02008-12-21 13:47:18@
编译通过...
├ 测试数据 01:答案正确... 0ms
├ 测试数据 02:答案正确... 0ms
├ 测试数据 03:答案正确... 0ms
├ 测试数据 04:答案正确... 0ms
---|---|---|---|---|---|---|---|-
Accepted 有效得分:100 有效耗时:0msWa了怎么多次,原来因为ansistring......
-
02008-12-19 21:28:01@
R1100041 Accepted 100 From sza603-
P1040 GCC Vag 6K 2008-12-19 20:57:28编译通过...
├ 测试数据 01:答案正确... 0ms
├ 测试数据 02:答案正确... 0ms
├ 测试数据 03:答案正确... 0ms
├ 测试数据 04:答案正确... 9ms
---|---|---|---|---|---|---|---|-
Accepted 有效得分:100 有效耗时:9ms#include
#include
typedef long NUM[1112],RES[2223];void cvtnum(const char*n,NUM num,int*len) {
int i,l;
const long _10n[]={1,10,100,1000,10000,100000,1000000,10000000,100000000};
for(l=strlen(n),i=0;i=0) printf("%09ld",n);
}int main() {
char s[10001];
NUM a={0},b={0};
RES c={0};
int ca,cb;
cvtnum(gets(s),a,&ca),cvtnum(gets(s),b,&cb);
mul(a,b,ca,cb,c);
out(c);
return 0;
}1000000000进制………………
-
02008-12-14 21:51:17@
编译通过...
├ 测试数据 01:答案正确... 0ms
├ 测试数据 02:答案正确... 0ms
├ 测试数据 03:答案正确... 0ms
├ 测试数据 04:答案正确... 41ms
---|---|---|---|---|---|---|---|-
Accepted 有效得分:100 有效耗时:41ms编译通过...
├ 测试数据 01:答案正确... 0ms
├ 测试数据 02:答案正确... 0ms
├ 测试数据 03:答案正确... 0ms
├ 测试数据 04:答案正确... 9ms
---|---|---|---|---|---|---|---|-
Accepted 有效得分:100 有效耗时:9ms同样的代码GCC用了41ms,CPP竟然只用了9ms,真是郁闷
-
02008-12-12 23:33:17@
编译通过...
├ 测试数据 01:答案正确... 0ms
├ 测试数据 02:答案正确... 0ms
├ 测试数据 03:答案正确... 0ms
├ 测试数据 04:答案正确... 368ms
---|---|---|---|---|---|---|---|-
Accepted 有效得分:100 有效耗时:368ms无语了……万进制 交 了 2次 才过…… 第一次 最后 一 点 竟然超时……
-
02008-12-07 14:53:04@
编译通过...
├ 测试数据 01:答案正确... 0ms
├ 测试数据 02:答案正确... 0ms
├ 测试数据 03:答案正确... 0ms
├ 测试数据 04:答案正确... 0ms
---|---|---|---|---|---|---|---|-
Accepted 有效得分:100 有效耗时:0msprogram p1040;
var
a,b,c:array[1..100000]of longint;
s:ansistring;
i,j,x,la,lb,lc:longint;
begin
readln(s);
la:=length(s);
for i:=1 to la do
a[la-i+1]:=ord(s[i])-48;
readln(s);
lb:=length(s);
for i:=1 to lb do
b[lb-i+1]:=ord(s[i])-48;
fillchar(c,sizeof(c),0);
for i:=1 to la do
begin
x:=0;
for j:=1 to lb do
begin
x:=a[i]*b[j]+x div 10+c;
c:=x mod 10;
end;
c:=x div 10;
end;
lc:=la+lb;
while (c[lc]=0)and(lc>1) do
dec(lc);
for i:=lc downto 1 do write(c[i]);
end. -
02008-12-05 19:08:03@
var s1,s2:ansistring;
n,i,j,l1,l2,x,p:longint;
a,b,c:array[0..10000]of longint;
begin
readln(s1);
readln(s2);
if length(s1) mod 4=0 then l1:=length(s1) div 4 else l1:=length(s1) div 4+1;
if length(s1) mod 4=0 then p:=1 else p:=2;
for i:=l1+1-length(s1) div 4 to l1 do
for j:=1 to 4 do
a[i]:=a[i]*10+ord(s1[(i-p)*4+length(s1) mod 4+j])-48;
for i:=1 to length(s1) mod 4 do a[1]:=a[1]*10+ord(s1[i])-48;
n:=length(s2);
if n mod 4=0 then l2:=n div 4 else l2:=n div 4+1;
if n mod 4=0 then p:=1 else p:=2;
for i:=l2+1-n div 4 to l2 do
for j:=1 to 4 do
b[i]:=b[i]*10+ord(s2[(i-p)*4+n mod 4+j])-48;
for i:=1 to n mod 4 do b[1]:=b[1]*10+ord(s2[i])-48;
for i:=l1 downto 1 do
for j:=l2 downto 1 do
begin
c:=c+a[i]*b[j];
c:=c+cdiv 10000;
c:=c mod 10000;
end;
x:=0;
while c[x]=0 do inc(x);
write(c[x]);
for i:=x+1 to l1+l2-1 do
if c[i] -
02008-12-13 09:37:16@
var st1,st2:string;
a,b,c:array[1..500] of integer;
ln1,ln2,i,j,max,s:integer;
begin
readln(st1);
readln(st2);
ln1:=length(st1);
ln2:=length(st2);
for i:=1 to ln1 do a[ln1-i+1]:=ord(st1[i])-48;
for i:=1 to ln2 do b[ln2-i+1]:=ord(st2[i])-48;
for i:=1 to ln1 do
for j:=1 to ln2 do
begin
s:=i+j-1;
c:=a[i]*b[j]+c;
if c>=10 then
begin
c:=c+c div 10;
c:=c mod 10;
end;
end;
max:=ln1+ln2;
while (c[max]=0) and (max>1) do
max:=max-1;
for i:=max downto 1 do
begin
write(c[i]);
end;
writeln;
end.哪位大牛帮我看一下,我是小学的,也想找师傅
-
02008-11-25 21:57:34@
无法忍受此题。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
-
02008-11-21 22:03:58@
丑陋的代码
var s1,s2:ansistring;
n,i,j,l1,l2,x,p:longint;
a,b,c:array[0..10000]of longint;
begin
readln(s1);
readln(s2);
n:=length(s1);
if n mod 4=0 then l1:=n div 4 else l1:=n div 4+1;
if n mod 4=0 then p:=1 else p:=2;
for i:=l1+1-n div 4 to l1 do
for j:=1 to 4 do
a[i]:=a[i]*10+ord(s1[(i-p)*4+n mod 4+j])-48;
for i:=1 to n mod 4 do a[1]:=a[1]*10+ord(s1[i])-48;
n:=length(s2);
if n mod 4=0 then l2:=n div 4 else l2:=n div 4+1;
if n mod 4=0 then p:=1 else p:=2;
for i:=l2+1-n div 4 to l2 do
for j:=1 to 4 do
b[i]:=b[i]*10+ord(s2[(i-p)*4+n mod 4+j])-48;
for i:=1 to n mod 4 do b[1]:=b[1]*10+ord(s2[i])-48;
for i:=l1 downto 1 do
for j:=l2 downto 1 do
begin
c:=c+a[i]*b[j];
c:=c+cdiv 10000;
c:=c mod 10000;
end;
x:=0;
while c[x]=0 do inc(x);
write(c[x]);
for i:=x+1 to l1+l2-1 do
if c[i] -
02008-11-13 22:05:20@
编译通过...
├ 测试数据 01:答案正确... 0ms
├ 测试数据 02:答案正确... 0ms
├ 测试数据 03:答案正确... 0ms
├ 测试数据 04:答案正确... 9ms
---|---|---|---|---|---|---|---|-
Accepted 有效得分:100 有效耗时:9ms#include
#include
main ()
{
char a1[10005],b1[10005];
int a[10005],b[10005],c[20015]={0};
scanf ("%s%s",a1,b1);
int as=strlen (a1),bs=strlen (b1);
int cs,t=0,t1=0;
for (int i=as-4;i>=0;i-=4)
a[t++]=(a1[i]-'0')*1000+(a1-'0')*100+(a1-'0')*10+(a1-'0')*1;
if (as-t*4==3)
a[t]=(a1[0]-'0')*100+(a1[1]-'0')*10+(a1[2]-'0')*1;
else if (as-t*4==2)
a[t]=(a1[0]-'0')*10+(a1[1]-'0')*1;
else if (as-t*4==1)
a[t]=(a1[0]-'0');
for (int i=bs-4;i>=0;i-=4)
b[t1++]=(b1[i]-'0')*1000+(b1-'0')*100+(b1-'0')*10+(b1-'0')*1;
if (bs-t1*4==3)
b[t]=(b1[0]-'0')*100+(b1[1]-'0')*10+(b1[2]-'0')*1;
else if (bs-t1*4==2)
b[t]=(b1[0]-'0')*10+(b1[1]-'0')*1;
else if (bs-t1*4==1)
b[t]=(b1[0]-'0');
for (int i=0;i=0;i--,t1++)
if (b1[i]!='0')
break;
for (int i=cs;i>=0;i--)
{
if (i==cs)
printf ("%d",c[i]);
else printf ("%.4d",c[i]);
}
}
//好像有些慢,不知用百,千进制能不能过,反正万进制肯定过