HDOJ 1041 Computer Transformation
http://acm.hdu.edu.cn/showproblem.php?pid=1041
简单的大数应用,但很久没有写大数的题WA了几次
a[i][j+1] = a[i][j] / 10; //进位
a[i][j] = a[i][j] % 10;
但不是简单的大数A+B,所以进位时要注意 /10;
改过来之后还是WA
于是怀疑自己推的公式不正确
看了下别人的公式
if( i % 2 == 0 ) times = times * 2 + 1 ;
else times = times * 2 - 1 ;
换了下公式还是WA
幸好不小心测了n=1的数据,发觉大数操作一个重要的地方漏了.
全0的时候要打1个0出来~~
改了下就AC,不过别人推出来的公式不好控制
我的公式也是对的:
a[i] = a[i-1] +a[i-2]*2;
#include <iostream>
using namespace std;
int a[1002][500] = {0};
int main()
{
int i,j,k,n,m,t;
a[0][0] = 0;a[1][0] = 0;a[2][0] = 1;a[3][0] = 1;
for(i=4;i<=1000;i++)
{
for(j=0;j<500;j++)
{
a[i][j] += a[i-1][j] +a[i-2][j]*2;
if(a[i][j] > 9)
{
a[i][j+1] = a[i][j] / 10;
a[i][j] = a[i][j] % 10; //进位
}
}
}
while (scanf("%d",&n)!=EOF)
{
int flag = 0;
if (n == 1 || n == 0)
{
printf("0/n");
continue;
}
for (i=500-1;i>=0;i--)
{
if (a[n][i] != 0 || flag == 1)
{
flag = 1;
printf("%d",a[n][i]);
}
}
printf("/n");
}
return 0;
}