第二次周賽D題(HDU-1013)
阿新 • • 發佈:2018-12-22
問題連結:https://vjudge.net/problem/HDU-1013
問題簡述:求數根。(個位的累加)
Get:有兩種方法:
1.硬剛(求得每個位上的數,再相加,再判斷)
AC程式碼:
#include <string>
#include <iostream>
using namespace std;
int main()
{
string a;
while (cin >> a&&a[0]!='0')
{
int sum = 0;
for (int i = 0; i < a.length(); i++ )
{
sum += a[i] - '0';
}
while (sum > 9)
{
int n = sum % 10;
sum = sum / 10 + n;
}
cout << sum << endl;
}
}
2.用九餘數定理。
找規律,發現要輸出的結果是長度為9的迴圈數。
九餘數定理:一個數對9取餘等於這個數各位數相加的和對9取餘,例如 123 %9 = (1+2+3)%9,然後也可以知道0–9之間(不包括0和9)任何數除9的餘數都是等於本身比如:4%9=4.。所以想求數根,用九餘數是很方便的。比如一個大於9的數除以9的餘數,這個餘數相當於0~9之間的某數除以9的餘數(九餘數定理)又因為4%9=4這個定理。更加確定數根即其餘數。
相關連結:https://blog.csdn.net/w_linux/article/details/76021378
AC程式碼:(sum-1後面又+1是為了解決當sum是9的倍數時的問題)
#include <string>
#include <iostream>
using namespace std;
int main()
{
string str;
while (cin >> str && str[0] != 48)
{
int sum = 0;
for (int i = 0; i < str.length(); i++ )
{
sum += str[i] - 48;
}
cout << (sum - 1) % 9 + 1 << endl;
}
}