欧拉计划Problem 56

A googol (10100) is a massive number: one followed by one-hundred zeros; 100100 is almost unimaginably large: one followed by two-hundred zeros. Despite their size, the sum of the digits in each number is only 1.

Considering natural numbers of the form, ab, where a, b < 100, what is the maximum digital sum?



#define N 100


int everydigit(int num[]);
int numpow(int num[],int a);


int numpow(int num[],int a)
{
int max = 0;
int d = 0;
for (int i = 0; i < N; i++)
{
for (int j = 0; j < N; j++)
{
num[j] = num[j]*a;
}
for (j = 0,d = 0; j < N; j++)
{
int temp = num[j]+d;
num[j] = temp%10000;
d = temp/10000;
}
if (max < everydigit(num))
{
max = everydigit(num);
}
}
return max;
}


int everydigit(int num[])
{
for (int i = 0,n = 0; num[i] != 0 && i < N;i++)
{
int temp = num[i];
while (temp != 0)
{
n += temp%10;
temp /=10;
}
}
return n;
}
int main()
{
clock_t ts,te;
ts=clock();
int answer = 0;
int num[N] = {0};
int temp = 0;
for (int a = 2; a < N; a++)
{
memset(num,0,sizeof(num));
num[0] = 1;
temp = numpow(num,a);
if (answer < temp)
{
answer = temp;
}
}
printf("\nanswer %d",answer);
te=clock();
printf("\ntime difference: %ds\n",(te-ts)/CLOCKS_PER_SEC);
getchar();
return 0;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值