1. 程式人生 > >第二次周賽D題(HDU-1013)

第二次周賽D題(HDU-1013)

問題連結: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; } }