高富帅

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



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值