ACM NOIP1999 回文數 水模擬

2021-06-23 06:02:12 字數 1200 閱讀 1400

★☆   輸入檔案:huiwen.in輸出檔案:huiwen.out簡單對比

時間限制:1 s   記憶體限制:128 mb

【問題描述】

若乙個數(首位不為0)從左到右讀與從右到左讀都是一樣,這個數就叫做回文數,例如12521就是乙個回文數。

給定乙個n進製正整數,把它的各位數字上數字倒過來排列組成乙個新數,然後與原數相加,如果是回文數則停止,如果不是,則重複這個操作,直到和為回文數為止。例如:10進製87則有:

step1: 87+78=165

step2: 165+561=726

step3: 726+627=1353

step4: 1353+3531=4884

任務:寫乙個程式,給定乙個n(2≤n≤10,n=16)進製數m(10~15用小寫字母a~f表示),m的位數上限為20。求最少經過幾步可以得到回文數。如果在30步以內(包括30步)不可能得到回文數,則輸出「impossible」,否則輸出該回文數及生成該回文數的最少步數。

【輸入格式】

檔案有兩行,每行乙個數,即n和n進製整數m

【輸出格式】

如果輸入檔案給定的資料在30步以內(包括30步)不可能得到回文數,則輸出檔案只有一行,即輸出「impossible」。

否則輸出檔案為兩行。第一行是由輸入檔案給定資料生成的回文數,第二行是生成該回文數的最少步數。

【輸入輸出樣例】

輸入1087

輸出48844

水模擬

#include #include #define maxn 100

char str[maxn];

char strrev[maxn];

long long stack[maxn];

int top;

long long gettenradix(char *strnum,int rad)

else

num=num*rad+strnum[i]-'0';

} return num;

}void tentoradix(char *str,long long num,int rad)

k=0;

while(top!=-1)

str[k]=0;

}bool iscircle(char *str)

return 0;

}

1309 例1 6 回文數 Noip1999

題目描述 若乙個數 首位不為零 從左向右讀與從右向左讀都是一樣,我們就將其稱之為回文數。例如 給定乙個 10進製數 56,將 56加 65 即把56從右向左讀 得到 121是乙個回文數。又如,對於10進製數87,step1 87 78 165 step2 165 561 726 step3 726 ...

1309 例1 6 回文數 Noip1999

1309 例1.6 回文數 noip1999 時間限制 1000 ms 記憶體限制 65536 kb 提交數 7074 通過數 2624 題目描述 若乙個數 首位不為零 從左向右讀與從右向左讀都是一樣,我們就將其稱之為回文數。例如 給定乙個 10進製數 56,將 56加 65 即把56從右向左讀 得...

52 回文平方數

52 回文平方數 問題描述 回文數是指從左向右念和從右向左唸都一樣的數。如12321就是乙個典型的回文數。給定乙個進製b 2 輸入說明 共一行,乙個單獨的整數b b用十進位制表示,比如18 輸出說明 每行兩個數字,第二個數是第乙個數的平方,且第二個數是回文數。注意 輸出時,這兩個數都應該以b進製表示...