解题思路:

注意事项:

参考代码:

#include<iostream>

#include<stdlib.h>

#include<math.h>

using namespace std;

int main()

{

int g;

scanf("%d",&g);

getchar();

for(int w=0;w<g;w++)

{

//输入数字 

string n;

cin>>n;

getchar();

//定义字母 代表的数字

//这里用ascll来解决代表的字数

int *s=NULL,Ls=0; 

for(int i=0;i<n.size();i++)

{

for(int w=1;w<=26;w++)

if(n[i]==97-1+w)

//将他们转化为数字后拼凑在一起即可 

//用ascll来写,会遇到无法存储两位数的问题 

{

Ls++;

s=(int *)realloc(s,Ls*sizeof(int));

s[Ls-1]=pow(w,2);

break; 

}

}

//还原(需要用一个数组来还原多位数的ascll码

string temp;

temp="\0";

for(int i=0;i<Ls;i++) 

{

int *t=NULL,Lt=0;

if(s[i]<10)

{

Lt++;

t=(int *)realloc(t,Lt*sizeof(int));

t[Lt-1]=s[i]; 

}

else

{

while(s[i]!=0)

{

Lt++;

t=(int *)realloc(t,Lt*sizeof(int));

t[Lt-1]=s[i]%10;

s[i]=s[i]/10;

}

}

//

string *u=new string[Lt];

for(int w=0;w<Lt;w++)

{

u[w]=t[w]+'0';

}

for(int j=Lt-1;j>=0;j--)

{

temp=temp+u[j];

}

}

//temp去除就好了

int Lo=temp.size();

//需要重新拆成数组

int *num=(int *)malloc(Lo*sizeof(int));

for(int i=0;i<Lo;i++)

{

num[i]=temp[i]-'0';

//rp值 

int *o=(int *)malloc(Lo*sizeof(int));

int chushu=101;

int q=0;

for(int j=0;j<Lo;j++)

{

o[j]=num[j]/chushu;

q=num[j]-o[j]*chushu;

if(j!=Lo-1)

num[j+1]=q*10+num[j+1];

}

printf("%d\n",q); 

  }



}


点赞(0)
 

0.0分

1 人评分

C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:

一点编程也不会写的:零基础C语言学练课程

解决困扰你多年的C语言疑难杂症特性的C语言进阶课程

从零到写出一个爬虫的Python编程课程

只会语法写不出代码?手把手带你写100个编程真题的编程百练课程

信息学奥赛或C++选手的 必学C++课程

蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程

手把手讲解近五年真题的蓝桥杯辅导课程

评论列表 共有 0 条评论

暂无评论