在平時的acm中很容易見到資料型別需要在數字和字元之間轉換的問題,我以乙個簡單的程式設計題來說一下這個問題。
讀入乙個正整數 n,計算其各位數字之和,用漢語拼音寫出和的每一位數字。
每個測試輸入包含 1 個測試用例,即給出自然數 n 的值。這裡保證 n 小於 10100。
在一行內輸出 n 的各位數字之和的每一位,拼音數字間有 1 空格,但一行中最後乙個拼音數字後沒有空格。
1234567890987654321123456789
yi san wu
思路:
我們知道加入我們以乙個string型別儲存這個數,這個「數字」的每一位就好拿出來,進行累加。然後再將累加的數每一位拆開,讓它按照對應的拼音輸出即可。
可能遇到的問題:首先,以string型別儲存數字後,每一位上儲存的是乙個字元而不是數字,所以如果直接使用『+』會產生錯誤(但編譯時候不會報錯);其次,累加之後資料型別應該是乙個int型的,按照我們的思路,對應拼音輸出的時候應該是字元。
關鍵點:
涉及到了兩次型別轉換。一次是在計算各位之和的時候,一次是在對應拼音輸出結果的時候。
#include#include#includeusing namespace std;
void judge(char num)
}int main(){
string n;
stringstream ss;
cin >> n;
int sum=0;
for(int i=0;i具體的演算法實現很簡單,主要說一下在這個過程中用到的兩種轉化方法。
用到了ascii碼。(ascii表我就不列了,網上有很多。)簡單來說就是:char型的要轉換成int型的,ascii碼差了乙個『0』的距離。
eg:char型轉化成int
char s=『1234』;
int a;
a = s - '0';//這就是實現了char型向int轉化;
int 轉化成char:
int a = 123445;
char s;
s = a+'0';
用包含在sstream庫中的stringstream。簡單來說stringstream的作用就是它吃進去乙個型別,然後給你吐出來另乙個你想要的型別。
stringstream ss;
int a = 1234;
ss << a;
string s = ss.str(); //s此時就是乙個字串型別的了;
關於這個題的解法肯定還有更簡單的,這裡不過多研究,主要是為了簡單說明一下這兩個型別之間的轉化問題。 C 中char和int轉換
1 整數轉化字串 sprintf 在標頭檔案 include中 語法 int sprintf string format,mixed args 返回值 字串長度 strlen 轉換字元 印出百分比符號,不轉換。c 整數轉成對應的 ascii 字元。d 整數轉成十進位。f 倍精確度數字轉成浮點數。o ...
C 中int與char相互轉換
了解int與char相互轉換之前,先讓我們看一下ascii碼表。其中數字字元對應的位置為 48 57。char轉int之前,先將表示式中的每個字元都轉換成ascii碼值,再進行計算。以下 為例,其中i3的結果符合我們的預期要求。char c 0 int i1 c 48 int i2 c 0 48 i...
C 中char 與string之間的轉換
string 轉換成 char string ss abcdefg char cc ss.tochararray char 轉換成string string s new string cc 此外,byte 與 string 之間的裝換 byte bb encoding.utf8.getbytes s...