#include<stdio.h>
int main()
{
int i,x,j,k,s=0,m;
char a[20];
int b[20];
scanf("%d",&x);
for(i=0;i<x;i++)
{
scanf("%s",a);
s=0;
for(j=0;j<20;j++)
{
if(a[j]=='\0')
{
k=j;
break;
}
b[j]=a[j]-'a'+1;
b[j]=b[j]*b[j];
}
for(m=0;m<k;m++)
{
if(b[m]/10==0)
s=s*10;
else
if(b[m]/100==0)
s=s*100;
else
if(b[m]/1000==0)
s=s*1000;
s=s+b[m];
}
if(s<=101)
printf("%d\n",s);
else
printf("%d\n",s%101);
}
return 0;
}
[ New Thread ]
Problem 1145 >> 为什么会运行错误50%? |
201803140220 @ 2018-12-10 19:56:42
|
admin @ 2018-12-18 11:00:24
回201803140220
这个问题涉及到大数运算。 大数已经超过int型数据范围,long long int也无法存下数据,所以你应该选用字符数组来保存数据。 而为什么要用大数,你看,如果数据为abcdefghij,那么得到数据为149162536496481100,整形无法存下 我看到你的代码是将b数组的每个元素mod101,而实际上,你应该把b数组中的元素看成一个整体去mod101 比如输入abd,那么我们需要的数据为1416,拿1416mod101,而不是1,4,16分开mod101。 在写这个题前,建议你先去看一下分类中【ACM-大数运算】中的题,写一下大数加法,然后再来看这个题就显得简单明了了。 |
admin @ 2018-12-18 11:05:20
回复的晚了(囧rz
|