强行刷段位第三天

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/Mirror1997/article/details/85842334

好快呀,都第三天了。

话不多说,刷题。


进制转换第一题:

题目:

将十进制数n转换成m进制数 m<=16

n<=100

输入描述:

共一行

n和m

输出描述:

共一个数

表示n的m进制

样例输入:

样例1:10 2

样例2:100 15

样例输出:

样例1:1010

样例2:6A

数据范围及提示:

用反向取余法

我的答案:

发现进入白银之后就是系统的刷题了,各种类型的基础题都来两道。

这种感觉很好,系统而有趣味。

一种类型两道,一天一个类型。有余力(变身乌龟的时候)的话可以再做一个类型。进度不紧不慢刚刚好。

这么看起来离黄金也不是那么的远了。

本题用到了除k取余法。要注意凡是大于9的数字都要用ABC什么的代替,万万不能搞一个两位数在那明晃晃的挂着。

自己总是在语法细节上遗忘,要记住本题的方式。

char arr[8];

if(n<10)     arr[top]='0'+n;
else           arr[top]='A'+n-10;

要注意:1.C语言中,字符的存储就是按其ASCII值(整数)进行存储的

               2.用单引号取出其ASCII码,不加单引号自动输出ASCII对应的字符

代码如下:

#include <iostream>
using namespace std;

int main()
{
	int n,m;
	cin>>n>>m;
	
	char arr[8];
	int top=-1;
	
	int temp=0;
	
	while(n!=0)
	{
		temp=n/m;
		top++;
		if(n%m<10)        arr[top]='0'+n%m;
		else   arr[top]='A'+n%m-10;
		
		n=temp;
	}
	
    while(top>=0)
    {
    	cout<<arr[top];
    	top--;
	}
	
	return 0;
	
 } 

进制转换第二题:

问题:

将m进制数n转化成一个十进制数 m<=16

题目保证转换后的十进制数<=100

输入描述:

共一行

n和m

输出描述:

共一个数

表示m进制的n化成十进制的数

样例输入:

1010 2

样例输出:

10

数据范围及提示:

乘权累加法

我的答案:

这题看似只是上一题的反过程,其实要比上一题复杂一些。在累乘过程中要慎重。行数也不多,20行足够完成。

这题学到的同样是语法问题。

1.以前上课那会儿字符串和数组就学的不扎实。字符串本质和char类型的数组是相同的,所以字符串也是可以用n[3]来表示字符串中第四个字符的。

2.另外,可以include<string.h>,利用strlen()来获得字符串长度,方便接下来的循环条件的书写。

代码如下:

#include <iostream>
#include <string.h>
using namespace std;

int main()
{
	int m;
	char n[8];
	cin>>n>>m;
	
	int len=strlen(n);
	int res=0;
	
    for(int i=0;i<len;i++)
    {
    	if(n[i]>='0' && n[i]<='9')
    	    res=res*m+n[i]-'0';
    	else if(n[i]>='A' && n[i]<='F')
    	    res=res*m+n[i]-'A'+10;
	}
	
	cout<<res;
	
    return 0;
}

还剩一个递推,一个递归。

递归的两道题感觉不是很难。递归的题目有5道,正好我的递归不熟练,可以好好练。里面有很多经典的问题,包括树和汉诺塔等等。

感觉再有个三天就能完成白银Silver啦。

希望早点升黄金Gold。

猜你喜欢

转载自blog.csdn.net/Mirror1997/article/details/85842334