高富帅

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



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