在數字的海洋中,有一種特殊的數字,稱作回文數,其判定規則是將一個數的各位上的數字反向排列所得自然數是否與原數相等。例如12321,就是一個回文數。
回文數像是一個陷阱,因為很多整數按照一定規則反復計算,總會變成一個回文數。計算規則如下:
假設有一個整數a,將它各位數字反轉以后得到另一個整數b,然后計算a=a+b,直到a是回文數為止。
以整數195為例,
195+591 = 786
786+687 = 1473
1473+3741 = 5214
5214+4125 = 9339
最終結果9339是一個回文數。
給出任意一個自然數,請計算出需經過多少次反轉相加后能得到一個回文數,并輸出計算次數和回文數。
如果輸入的整數為回文數,則輸出HW
如果輸入的不是回文,則輸出該整數變為回文數需經歷的計算次數和最終的回文數,兩個結果空格隔開
如果反復計算的次數大于10時仍未得到回文,則輸出NONE
輸入
輸入一個整數,數值在int型別范圍內。
輸出
如果輸入的整數為回文數,則輸出HW
如果輸入的不是回文,則輸出該整數變為回文數需經歷的計算次數和最終的回文數,兩個整數空格隔開
如果反復計算的次數大于10仍未得到回文,則輸出NONE
樣例輸入 Copy
195
樣例輸出 Copy
4 9339
提示
中間及最終計算結果有可能溢位
# include<stdio.h>
# include<math.h>
int back(int n);
int main(void)
{
int i;
long long int n,b;
scanf("%lld",&n);
if(n==back(n))
printf("HW\n");
else
{
for(i=1;i<=10;i++)
{
b=back(n);
n=n+b;
if(n==back(n))
{
printf("%d %lld\n",i,n);
break;
}
}
if(i>10)
printf("NONE\n");
}
return 0;
}
int back(int n)
{
long long int len,i,d,s=0;
len=log10(n)+1;
for(i=1;i<=len;i++)
{
d=n%10;
s=s*10+d;
n=n/10;
}
return s;
}
驗證時顯示答案錯誤怎么解決,望提供建議
uj5u.com熱心網友回復:
望各位仁兄,幫幫忙。提交時總是驗證為答案錯誤,不知何因。轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/206168.html
標籤:C語言
