我刚刚测验过 19500那个数据 他应该用的 5 120 来测试的 在我这 5 120 输出的就是 19500 根本不是 19497
----------------解决方案--------------------------------------------------------
可是用那个进制法求为什么第九个数据就AC呢?
----------------解决方案--------------------------------------------------------
我的int和double版都被我的高精度程序给覆盖了,所以只能把我的高精度程序发出来
#include<stdio.h>
#include<math.h>
typedef int SUN;
SUN s[2005][12]={0};
void q(SUN m[],SUN n[],SUN x[])
{
int i;
for(i=11;i>0;i--) { x[i]+=m[i]+n[i]; x[i-1]+=x[i]/10; x[i]=x[i]%10; }
}
void p(SUN m,SUN n,SUN x[])
{
int i,j;
int r=11;
x[r]=1;
for(i=0;i<n;i++)
{
for(j=11;j>=r;j--)
{
x[j]*=m;
}
for(j=11;j>=r;j--)
{
x[j-1]+=x[j]/10;
x[j]=x[j]%10;
}
if(r-3>-1) r-=3;
}
}
int main(void)
{
int K,N;
int i,t=2,j=2;
scanf("%d%d",&K,&N);
s[1][11]=1;
s[2][11]=K%10;
s[2][11]=K/10;
while(j<N+2)
{
for(i=1;i<j;i++) q(s[i],s[j],s[i+j]);
j=j+i;
p(K,t,s[j]);
t++;
}
i=1;
while(!s[N][i++]) ;
for(--i;i<12;i++)
printf("%d",s[N][i]);
return 0;
}
结果与int一样
----------------解决方案--------------------------------------------------------
这个是我的 算法好像一样吧
#include <stdio.h>
#include<math.h>
int main()
{
int k ,n,i,j,m,t,L,y;
int a[1000]={0};
a[0]=1;
while(scanf("%d%d",&k,&n)!=EOF){
j=1,t=0,L=1,y=2;
for(m=0;m<n;m++)
{
if(j+1==y){
y=y*2;
t=pow(k,L++);
a[j++]=t;
i=0;
continue;
}
a[j++]=t+a[i++];
}
printf("%d",a[n-1]);
}
}
----------------解决方案--------------------------------------------------------
----------------解决方案--------------------------------------------------------
什么叫算不到N 1000?
15 1000
为什么我的不可以呢? 大哥给诊断一下拉
----------------解决方案--------------------------------------------------------
/*---------------------------------------------------------------------------
File name: vijos1319.c
Author: HJin (email: fish_sea_bird [at] yahoo [dot] com )
Created on: 8/13/2007 03:46:19
Environment: Windows XP Professional SP2 English +
Visual Studio 2005 v8.0.50727.762
Modification history:
===========================================================================
I think Leeco and my algorithm work. Mine has to be modified a little bit.
Here is a AC submission:
R431946 Accepted 100 From hjin- P1319 GCC Vivid Puppy 2007-8-13 18:41:25
==================(submitted code)=============================
main(){int k,N,s,p;while(scanf("%d%d",&k,&N)!=-1){s=0;p=1;while(N){if(N&1)s+=p;p*=k;N>>=1;}printf("%d\n",s);}}
*/
main()
{
int k, N, s, p;
while(scanf("%d%d", &k, &N)!=-1)
{
s=0;
p=1;
while(N)
{
if(N&1)
s+=p;
p*=k;
N>>=1;
}
printf("%d\n", s);
}
}
----------------解决方案--------------------------------------------------------
15 1000应该是41189262750,用unsigned够了
----------------解决方案--------------------------------------------------------
你和leeco的算法一样么
就是把 /2换成了>>1 了
[此贴子已经被作者于2007-8-13 18:54:05编辑过]
----------------解决方案--------------------------------------------------------
15 1000的结果超int型了,我过了说明他测试数据没那么刁钻。
15 1000应该是41189262750,用unsigned够了
题目明确说明:保证输出数据在2^31以内,所以表示用int完全可以,不需要用极端数据15 1000测试,我用过unsigned,同样过6个数据
----------------解决方案--------------------------------------------------------