/ /

记录详情

Accepted

foo.cc: In function 'int main()':
foo.cc:47:6: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
 scanf("%s %d",N,&k);
 ~~~~~^~~~~~~~~~~~~~
正在同步测试数据,请稍后
[Hydro](https://hydro.ac)提供评测服务
# 状态 耗时 内存占用
#1 Accepted 1ms 384.0 KiB
#2 Accepted 1ms 384.0 KiB
#3 Accepted 1ms 384.0 KiB
#4 Accepted 13ms 396.0 KiB
#5 Accepted 4ms 436.0 KiB
#6 Accepted 13ms 392.0 KiB
#7 Accepted 17ms 424.0 KiB
#8 Accepted 15ms 432.0 KiB
#9 Accepted 20ms 392.0 KiB
#10 Accepted 21ms 432.0 KiB

代码

#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <iostream>
#include <algorithm>
struct hp

{
int s[210];
} n,a,b,ans;
char N[110];
int k,now,tmp;

void mult1(hp a,hp b,hp &c,int d)
{
hp s;
memset(s.s,0,sizeof(s.s));
for(int i=1;i<=d;i++)
for(int j=1;j<=d;j++)
s.s[i+j-1]+=a.s[i]*b.s[j];
for(int i=1;i<=d+1;i++)
if (s.s[i]>=10)
{
s.s[i+1]+=s.s[i]/10;
s.s[i]%=10;
}
c=s;
}

void mult2(hp a,int b,hp &c)
{
hp s;
memset(s.s,0,sizeof(s.s));
for(int i=1;i<=200;i++)
s.s[i]+=a.s[i]*b;
for(int i=1;i<=200;i++)
if (s.s[i]>=10)
{
s.s[i+1]+=s.s[i]/10;
s.s[i]%=10;
}
c=s;
}

int main()
{
scanf("%s %d",N,&k);
for(int i=strlen(N)-1,j=1;i>=0;i--,j++)
n.s[j]=N[i]-'0';
ans.s[1]=1;
a=n;
for(now=1;now<=k;now++)
{
b=n;
tmp=b.s[now];
int len=0;
do
{
mult1(a,b,b,k);
len++;
}while(len<10&&b.s[now]!=tmp);
if (b.s[now]!=tmp)

{
printf("-1");
return 0;
}
b=a;
for(int i=1;i<=len-1;i++)

mult1(a,b,a,k);
mult2(ans,len,ans);
}

int out;
for(out=200;ans.s[out]==0;out--);
for(;out>=1;out--)
printf("%d",ans.s[out]);
return 0;
}

信息

递交者
类型
递交
题目
P1018 循环
题目数据
下载
语言
C++
递交时间
2021-08-11 20:52:39
评测时间
2021-08-11 20:52:40
评测机
分数
100
总耗时
112ms
峰值内存
436.0 KiB