博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
王道机试指南 P2
阅读量:3898 次
发布时间:2019-05-23

本文共 3547 字,大约阅读时间需要 11 分钟。

题目如下:

在这里插入图片描述
这题的难点首先在于:拆分,将一个数,按照从大到小的拆分,那我可能回想着,用两个字符串数组来存数据,然后使用两次for循环来存这个值。

#include
#include
#include
#include
#include
#include
using namespace std;//用两个字符串数组来存对应的数据,然后将位数 一个个的变成数值,存起来//可是这样的话,小于一万的,很难存出来。。。,不对,是可以存出来的int main(){ char a[100]; char b[100]; int sum=0; while(scanf("%s%s",a,b)!=EOF){ int len1=strlen(a); int len2=strlen(b); for(int i=0;i

下一题

在这里插入图片描述

#include
#include
#include
#include
#include
#include
using namespace std;//这题就是进制转换的一种变形题型int main(){ int m,a,b; int res[20];//(这题排除了十六进制的可能性,所以就不用考虑出现大写的值 while(scanf("%d%d%d",&m,&a,&b)!=EOF&&m!=0){ int sum=a+b; int i=0; while(sum){ res[i]=sum%m; sum/=m; i++; } for(int j=i-1;j>=0;j--) printf("%d\n",res[j]); }}

下一题

在这里插入图片描述
要输入三个数,也即是将a进制的n转换为进制,其实也算是将a进制的n转换为10进制,然后将已经转换为10进制的数值再转换为b进制。
需要注意的是这段代码不适合放在codeblock上运行
13年的帖子,说code::blocks种pow函数会截断,而不是四舍五入
需要改成

(int)round(pow(a,w)

#include
#include
#include
#include
#include
#include
using namespace std;//首先是如何将一个进制转化为十进制,然后是将十进制转换为对应进制int main(){ int a,b; char Str[100]; char res[100]; while(scanf("%d%s%d",&a,Str,&b)!=EOF){ int sum=0;//用来存十进制 //一个进制转化内十进制主要是要 每一位相加乘以那个进制的次数 //并且在这题中a,A都是一样的 int len1=strlen(Str); int w=0;//这个是用来定位的 for(int i=len1-1;i>=0;i--){ //这里需要注意,从后往前的 //要对这个值进行判断 if(Str[i]>='A'&&Str[i]<='Z') sum=sum+(Str[i]-'A'+10)*pow(a,w);//这就是转换为十进制的方法 else if(Str[i]>='a'&&Str[i]<='z') sum=sum+(Str[i]-'a'+10)*pow(a,w); else if(Str[i]>='0'&&Str[i]<='9') sum=sum+(Str[i]-'0')*pow(a,w); printf("%d ",sum); w=w+1; } printf("%d\n",sum); //这样子的sum就是对应的十进制,然后开始转换为b进制的值,主要是大于十进制的话,就需要判断那个大于的值是什么 int temp,j=0; while(sum){ temp=sum%b; if(temp>10) res[j]=(temp-10+'A');//大于10 的变化 else res[j]=(temp+'0');//因为是字符,所以需要进行对应的转化 sum/=b; j++; } //再开始输出 for(int i=j-1;i>=0;i--) printf("%c",res[i]); printf("\n"); }}

下一题

在这里插入图片描述

#include
#include
#include
#include
#include
#include
using namespace std;//整除问题 给一个n和一个a 求最大的k使得n的阶乘,能被a的k次整除但是不能被a的k加一次整除//写一个方法求阶乘int jie(int x){ int sum=1; for(int i=1;i<=x;i++) sum*=i; return sum;}int main(){ //我的思路可能就是直接暴力 然后判断一个最大值 int n,a; scanf("%d%d",&n,&a); int mmax=0; for(int i=1;i<10;i++){ int x1=(int)round(pow(a,i)); int x2=(int)round(pow(a,i+1)); if(jie(n)%x1==0 &&jie(n)%x2!=0){ //再满足条件的情况之下,并且大于当前最大值 if(i>mmax) mmax=i; } } printf("%d",mmax);}

下一题

在这里插入图片描述

#include
#include
#include
#include
#include
#include
using namespace std;//写一个加法器,位数非常大,其实也就是一个字符串之间相加的一个值//只需要创建三个字符串数组,(这样比较省力)//然后一个判断进位的值初始为0,最开始一个for循环从低位,也就是数组位置为len-1的地方//之后很可能会出现,长度不一致的情况,所以找没有变成0的那个,进行递归下去int main(){ char Str1[10000]; char Str2[10000]; char sum[10000]; //先输入对应的字符串 while(scanf("%s%s",Str1,Str2)!=EOF){ int len1=strlen(Str1); int len2=strlen(Str2); int i,j,w=0;//要注意w是从后往前的 int flag=0; for(i=len1-1,j=len2-1;j>=0&&i>=0;i--,j--){ //这里用到&&别忘记 sum[w]=Str1[i]+Str2[j]-'0'+flag;//这里-'0'其实是因为 -'0'-'0'+'0' 的缩写 前两个减去是为了让str1和str2从字符变成数字,后一个加是为了从数字变成字符 //然后开始判断 flag=0; if(sum[w]>'9'){ //要减去,并且进位 sum[w]-=10; flag=1; } w++; } //然后可能会剩余str1或者str2其中一个 while(i>=0){ sum[w]=Str1[i]+flag; flag=0; if(sum[w]>'9'){ //要减去,并且进位 sum[w]-=10; flag=1; } w++; i--; } //这两个只可能发生一个 while(j>=0){ sum[w]=Str2[j]+flag; flag=0; if(sum[w]>'9'){ //要减去,并且进位 sum[w]-=10; flag=1; } w++; j--; } //然后开始输出 从后往前输出 for(i=w-1;i>=0;i--) printf("%c",sum[i]); }}

转载地址:http://kyfen.baihongyu.com/

你可能感兴趣的文章
真正的阅读者,是不需要荐书的
查看>>
shell中函数返回值
查看>>
[小技巧] gdb 里数值轮换
查看>>
ClearCase项目管理介绍
查看>>
解决 ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES) 问题
查看>>
WordPress快速建站
查看>>
[豆知识] 关于 rpm 安装包
查看>>
How To Set Up vsftpd on Ubuntu 12.04
查看>>
实例演示如何使用WordPress自定义字段
查看>>
在 WordPress 指定页面加载指定 JavaScript 或 CSS 代码
查看>>
Apache配置多个监听端口和不同的网站目录的简单方法
查看>>
Linux 搭建 discuz 论坛
查看>>
如何在discuz帖子中插入视频
查看>>
怎么更改织梦网站logo和默认广告
查看>>
织梦系统如何插入优酷视频?
查看>>
Discuz设置特定用户组不启用验证码发帖权限
查看>>
百度云服务器 CentOS 图形界面支持
查看>>
为什么要使用R语言?历数R的优势与缺点
查看>>
[小技巧] Linux 下查询图片的大小
查看>>
Linus Torvalds说那些对人工智能奇点深信不疑的人显然磕了药
查看>>