題目描述php
給定一個整數,請將該數各個位上數字反轉獲得一個新數。新數也應知足整數的常見形式,即除非給定的原數爲零,不然反轉後獲得的新數的最高位數字不該爲零(參見樣例2)。算法
輸入格式編程
一個整數 N函數
輸出格式spa
一個整數,表示反轉後的新數。遊戲
輸入樣例 #1 ip
123數學
輸出樣例 #1 io
321循環
輸入樣例 #2
-380
輸出樣例 #2
-83
將一個非負整數number各位上的數字依次分離出來,其操做步驟爲:
1)分離出number的個位數,即number%10。
2)將number除以10,做爲新的number,即新的number丟掉了個位數。
3)若是number等於0,分離完畢,結束。不然,轉第1)步,繼續顯示。
例如,number=1234,number%10=4, number=1234/10=123,獲得數字4;
number%10=3, number=123/10=12,獲得數字3;
number%10=2, number=12/10=1,獲得數字2;
number%10=1, number=1/10=0,獲得數字1;結束。
由數字四、三、二、1如何獲得整數4321呢?
4321=4*1000+3*100+2*10+1=4*103+3*102+2*10+1
右邊的多項式能夠採用秦九韶算法求解。
設要求解 P=4*103+3*102+2*10+1
可演變爲 P=(((0*10+4)*10 +3)*10+2)*10+1。
這樣,可令P初值爲0,每給定一個數字a,執行 P=P*10+a 便可。
由數字四、三、二、1獲得整數4321的過程描述爲:
P=0 ,給出數字4,P= 0*10+4 =4; 以後數字3 , P=4*10+3= 43;
以後數字2,P= 43*10+2 =432; 最後數字1 , P=432*10+1= 4321。
將上述兩個操做結合起來,一邊分離出number的各位上的數字,一邊將其拼到逆序數P上去,這樣可將求number逆序數P的過程寫成一個簡單的循環。
P=0;
While (number!=0) { p=p*10+number%10; number=number/10; }
#include <stdio.h>
int main()
{
int n,m,f;
scanf("%d",&n);
m=0; f=1;
if (n<0)
{
n=-n;
f=-1;
}
while (n!=0)
{
m=m*10+n%10;
n/=10;
}
m=f*m;
printf("%d\n",m);
return 0;
}
題目描述
「迴文」是指正讀反讀都能讀通的句子,它是古今中外都有的一種修辭方式和文字遊戲,如「我爲人人,人人爲我」等。在數學中也有這樣一類數字有這樣的特徵,稱爲迴文數(palindrome number)。
設n是一任意天然數。若將n的各位數字反向排列所得天然數n1與n相等,則稱n爲一回文數。例如,若n=1234321,則稱n爲一回文數;但若n=1234567,則n不是迴文數。
例如,10到100之間的迴文數有11,22,33,44,55,66,77,88,99共9個。
輸入格式
兩個整數a和b(10≤a≤b≤65535)。
輸出格式
一個整數,表示整數a和b之間全部迴文數的個數。
輸入樣例
10 100
輸出樣例
9
(1)編程思路。
一個正整數若是其逆序數與其相等,則它必定是一個迴文數。按例6的方法編寫一個函數int inverse(int n)求整數n的逆序數。
(2)源程序。
#include<stdio.h>
int inverse(int n)
{
int s=0;
while (n!=0)
{
s=s*10+n%10;
n/=10;
}
return s;
}
int main()
{
int a,b,cnt,i;
while(scanf("%d%d", &a,&b)!=EOF)
{
cnt=0;
for (i=a;i<=b;i++)
if (i==inverse(i)) cnt++;
printf("%d\n", cnt);
}
return 0;
}
本題選自杭州電子科技大學OJ題庫 (http://acm.hdu.edu.cn/showproblem.php?pid=1282)
Problem Description
一個正整數,若是從左向右讀(稱之爲正序數)和從右向左讀(稱之爲倒序數)是同樣的,這樣的數就叫回文數。任取一個正整數,若是不是迴文數,將該數與他的倒序數相加,若其和不是迴文數,則重複上述步驟,一直到得到迴文數爲止。例如:68變成154(68+86),再變成605(154+451),最後變成1111(605+506),而1111是迴文數。因而有數學家提出一個猜測:不論開始是什麼正整數,在通過有限次正序數和倒序數相加的步驟後,都會獲得一個迴文數。至今爲止還不知道這個猜測是對仍是錯。如今請你編程序驗證之。
Input
每行一個正整數。
特別說明:輸入的數據保證中間結果小於2^31。
Output
對應每一個輸入,輸出兩行,一行是變換的次數,一行是變換的過程。
Sample Input
27228
37649
Sample Output
3
27228--->109500--->115401--->219912
2
37649--->132322--->355553
(1)編程思路。
一樣編寫一個函數int inverse(int n)求整數n的逆序數。
(2)源程序。
#include<stdio.h>
int inverse(int n)
{
int s=0;
while (n!=0)
{
s=s*10+n%10;
n/=10;
}
return s;
}
int main()
{
int m,cnt,t;
while(scanf("%d",&m)!=EOF)
{
cnt=0;
t=m;
while (t!=inverse(t))
{
cnt++;
t=t+inverse(t);
}
printf("%d\n",cnt);
printf("%d",m);
while (cnt--)
{
m=m+inverse(m);
printf("--->%d",m);
}
printf("\n");
}
return 0;
}
本題選自杭州電子科技大學OJ題庫 (http://acm.hdu.edu.cn/showproblem.php?pid=4554)
Problem Description
叛逆期的小明什麼都喜歡反着作,連看數字也是如此(負號除外),好比:小明會把1234它當作4321;把-1234當作-4321;把230當作032 (032=32);把-230當作-032(-032=-32)。
如今,小明作了一些a+b和a-b的題目(a, b爲整數且不含前導0),若是給你這些題目正確的答案,你能猜出小明會作獲得什麼答案嗎?
Input
輸入第一行爲一個正整數T(T<=10000),表示小明共作了T道題。
接下來T行,每行是兩個整數x,y(-1000000<=x, y<=1000000), x表示a+b的正確答案,y表示a-b的正確答案。
輸入保證合法,且不需考慮a或b是小數的狀況。
Output
輸出共T行,每行輸出兩個整數s t,之間用一個空格分開,其中s表示小明將獲得的a+b答案,t表示小明將獲得的a-b答案。
Sample Input
3
20 6
7 7
-100 -140
Sample Output
38 24
7 7
-19 -23
(1)編程思路。
因爲輸入的x和y是正確答案,即x=a+b ,y=a-b。 可求得 a=(x+y)/2,b=(x-y)/2。
分別求得a和b的逆序數c和d,這是小明的運算數,輸出c+d和c-d便可。
(2)源程序。
#include<stdio.h>
int inverse(int n)
{
int s=0;
while (n!=0)
{
s=s*10+n%10;
n/=10;
}
return s;
}
int main()
{
int x,y,a,b,c,d,t;
scanf("%d", &t);
while(t--)
{
scanf("%d %d", &x, &y);
a = (x +y) / 2;
b = (x - y) / 2;
if (a < 0)
c = -1*inverse(-a);
else
c = inverse(a);
if (b < 0)
d = -1*inverse(-b);
else
d = inverse(b);
printf("%d %d\n", c + d, c - d);
}
return 0;
}