这是问题
考虑a ^ b的所有整数组合,2≤a≤5且2≤b≤5:
2^2=4, 2^3=8, 2^4=16, 2^5=32
3^2=9, 3^3=27, 3^4=81, 3^5=243
4^2=16, 4^3=64, 4^4=256, 4^5=1024
5^2=25, 5^3=125, 5^4=625, 5^5=3125
如果它们按数字顺序放置,删除任何重复,我们得到以下15个不同术语的序列:
4,8,9,16,25,27,32,64,81,125,243,256,625,1024,3125
对于2≤a≤100和2≤b≤100,^ b生成的序列中有多少个不同的术语?
这是我的代码
int b[10000][300]={};
int a[10000][300]={};
int main(void)
{
int i,j,k=0,z;
int ticker=2;
int carry=0,oi=0;
int carry1=0,count=0;
for(i=0;i<10000;i++)
{
a[i][0]=1;
}
for(k=0;k<100;k++)
{
for(i=0;i<100;i++)
{
for(j=0;j<300;j++)
{
carry1=(ticker*a[k][j]+carry)/10;
a[k][j]=(ticker*a[k][j]+carry)%10;
carry=carry1;
}
for(z=0;z<300;z++)
{
b[oi][z]=a[k][z]; // Storing the number, everytime its multiplied
}
oi++;
carry1=0;
carry=0;
}
ticker++;
}
int l=0,flag=0,blue=0;
for(z=0;z<9900;z++)
{
for(i=0;i<9900;i++)
{
for(j=0;j<205;j++)
{
if(b[z][j]!=b[i][j])
{
blue++;
break;
}
}
}
if(blue==9899)
{
l++;
}
blue=0;
}
printf("\n%d\n",l-99);
return(0);
}
这是我的解释。 由于C不能处理大数,我决定通过设计乘法算法将a ^ b得到的每个数字存储在一个数组中。即我将该数字的数字存储在一个数组中。 然后我检查数组中的哪些数字是相同的并消除它们。 这很简单。但不知怎的,我没有得到正确的答案,这是9183,并已多次查看我的代码但无法找到故障 帮帮我们。谢谢
答案 0 :(得分:3)
如果我正确理解您的代码,您将计算最后一个循环块中的唯一数字。这意味着你根本不算16 = 2 ^ 4 = 4 ^ 2 = 16 ^ 1。
如果您在不计算重复项的情况下计算重复项(只是一小段提示不会破坏问题),您可以使用普通int
解决此问题。
答案 1 :(得分:0)
我认为你的问题是在循环的范围内。 例如,您在一次乘法迭代后存储数字,这意味着(n ^ 1)。 我建议你减少变量。代码将更具可读性,并且错误的可能性将会下降。