-
[1504] 高富帥
- 時間限制: 1000 ms 內存限制: 65535 K
- 問題描述
-
NBUT ACM集訓隊有位十分高,十分富,十分帥,十分有才的十分十高富帥zyvas,他今天給集訓隊未來十分有希望的你們出了一道十分簡單的題目,請看十分簡單明瞭的'輸入','輸出',然後給出十分有殺傷力的代碼A掉這道十分無聊的題目;
- 輸入
-
有多個測試數據
每個測試數據輸入一個非負整數n(n的長度<=1000) - 輸出
-
輸出n%9的結果
- 樣例輸入
-
9 10 11 12345
- 樣例輸出
-
0 1 2 6
- 提示
-
無
- 來源
-
本站或者轉載
- 操作
-
思路:主要通過取模來簡化,取模的主要性質有:
① (a + b) % c = (a % c + b % c) % c
②(a * b) % c = (a % c * b % c) % c
那麼長度爲不超過1000的整數,它的每一位都可以轉化成 數字*權 的方式,假設某一位的數字爲X,對應的權位10^y,那麼(X * 10^y) % 9 = (X % 9 * 10^y % 9),由於10^y % 9 = 1,所以(X * 10^y) % 9 = X % 9,假設輸入的數爲X1X2...Xn = X1*10^(n-1) X2*10^(n-2)...Xn*10^0, ( X1*10^(n-1) X2*10^(n-2)...Xn*10^0)% 9 = ( X1*10^(n-1)%9 X2*10^(n-2)%9...Xn*10^0%9)= (X1%9+X2%9+...+Xn%9) % 9,即每一位對9取模的和再模9
代碼:
#include"cstdio"
#include"cstring"
#include"iostream"
#include"algorithm"
using namespace std;
int num[1005];
char str[1005];
int main()
{
while(~scanf("%s",str))
{
int len = strlen(str);
int ans = 0;
for(int i = 0;i < len;i++)
{
num[i] = str[i] - '0';
ans += num[i] % 9;
}
printf("%d\n",ans%9);
}
return 0;
}