高富帥

  • [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;
}



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章