題意:給你一個整數(騙你的),讓你求它的數字根(經過處理後隻剩下的個位數),如果不是個位數就要循環一個操作:把各個位的數加起來組合成一個新數,直到這個數是一個個位數(即題目所說的數字根)。
這題其實不難,題目也短,還好了解,然後正常人都很快就用一個int就寫完并開心地交上去了。
恭喜你得到了一個WA。
然後你反複檢查自己的代碼,覺得,沒毛病啊,int範圍不夠?改個long int 或 long long int 交上去,太棒了,還是一個WA。
這時候你就基本該想到了,這是一個超過long long int 範圍的大整型,和1002題目一樣考的是字元串處理。
估計這個串的規模在1000左右,出題人的目的達到了,不會在串的長度上為難人的,畢竟是道基礎題。
杭電傳送器
![](https://img.laitimes.com/img/9ZDMuAjOiMmIsIjOiQnIsISO3ITMxQDNzIDMzQDM3EDMy8CX0Vmbu4GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.jpg)
以下是我的AC代碼:
#include <iostream>
#include <string>
using namespace std;
int main()
{
//如果用int 或 long long int 都隻能得到WA,但你又感覺自己的代碼符合題意
//這就意味着不是你思路錯,而是題目規模,那麼短的題目肯定有坑
string str; //用string類定義字元串時不寫一維長度
while(cin >> str)
{
if(str[0]=='0') //輸入0結束
break;
else //9*1000都還沒超過整型,估計這題的串規模在1000左右
{
int n=0,a;
for(int i=0;str[i]!='\0';i++) //把串的和變為整型存到n
n+=str[i]-'0';
while(n>=10) //對n進行處理知道n是個位數(即題目說的數字根)
{
a=n; //用一個變量a來代替n進行下面的處理
n=0; //先清零變量n
while(a) //把a的各個位的數的和賦給n,循環到a==0的時候結束
{
n+=a%10; //每次都加個位數
a/=10; //把a的個位除掉
}
}
cout << n << endl; //AC了,好開心!
}
}
return 0;
}