NYOJ 105 九的余数【数学】
2014-07-25 01:20
281 查看
九的余数
时间限制:3000 ms | 内存限制:65535 KB难度:3
描述
现在给你一个自然数n,它的位数小于等于一百万,现在你要做的就是求出这个数整除九之后的余数。
输入
第一行有一个整数m(1<=m<=8),表示有m组测试数据;
随后m行每行有一个自然数n。
输出
输出n整除九之后的余数,每次输出占一行。
样例输入
3 4 5 465456541
样例输出
4 5 4
来源
[苗栋栋]原创
同余模定理
公式: (a*b)%c == ((a%c)*(b%c))%c
(a+b)%c == ((a%c)+(b%c))%c
例如:求 5978%9的值
5987可化为 5978 = 5000 + 900 + 70 + 8
运用公式 : 5978%9=((5000%9) + (900%9) + (70%9) + (8%9)) %9
5000%9 = ((5%9) * (1000%9))%9
而 (1000%9) = ((10%9) * (10%9)*(10%9))%9 , 10%9==1
所以 5000%9 = ((5%9) * (1000%9))%9 =5%9=5
以此类推,可得每一位上的数相加 再对9取余
即 5978%9 = (5+9+8+7)%9 = 29 % 9 = 2
先运用公式2加法,在运用公式1乘法。
ps: 有人可能考虑到 900%9结果不是为0吗?是否要加上判断?
答案是不需要。因为加上9,对余数(结果)是没有影响的。
求一个数x对y余数,相当于求 x - (n*y) ,把y的倍数减去后剩余多少,即余数。
AC码
#include<stdio.h> #define MAXN 1000000 + 10 char a[MAXN]={}; int main() { int m,i,sum,t; scanf("%d",&m); while(m--) { sum = 0; scanf("%s",a); for(i=0;a[i]!='\0';i++) sum += a[i]-'0'; t = sum % 9; printf("%d\n",t); } return 0; }
相关文章推荐
- 9的余数(NYOJ105)
- NYOJ105 - 九的余数
- Nyoj 105 九的余数
- NYOJ 题目105 九的余数(数学)
- NYOJ 105 9的余数
- NYOJ - 105 - 九的余数(大数求余)
- NYOJ-105-九的余数(数论)
- NYOJ 105 九的余数
- nyoj 105 九的余数
- NYOJ 105 九的余数
- NYOJ-105 九的余数
- nyoj--105--九的余数(水题)
- nyoj105 九的余数
- nyoj 105 九的余数
- nyoj105 九的余数(数学)
- nyoj 105 九的余数
- nyoj--105--九的余数(水题)
- nyoj 105 九的余数
- nyoj-105-九的余数
- 大数取余解析[以NYoj 105 九的余数 为例]