1. 程式人生 > >強行刷段位第三天

強行刷段位第三天

好快呀,都第三天了。

話不多說,刷題。


進位制轉換第一題:

題目:

將十進位制數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。