NYOJ 105 九的余数【数学】
来源:互联网 发布:打车软件分析报告 编辑:程序博客网 时间:2024/05/17 03:14
九的余数
- 描述
现在给你一个自然数n,它的位数小于等于一百万,现在你要做的就是求出这个数整除九之后的余数。
- 输入
- 第一行有一个整数m(1<=m<=8),表示有m组测试数据;
随后m行每行有一个自然数n。 - 输出
- 输出n整除九之后的余数,每次输出占一行。
- 样例输入
345465456541
- 样例输出
454
- 来源
- [苗栋栋]原创
同余模定理
公式: (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 + 10char 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;}
- NYOJ 105 九的余数【数学】
- NYOJ 题目105 九的余数(数学)
- nyoj 105 九的余数
- NYOJ-105 九的余数
- nyoj 105 九的余数
- NYOJ 105 九的余数
- NYOJ 105 九的余数
- Nyoj 105 九的余数
- NYOJ 105 九的余数
- nyoj 105 九的余数
- NYOJ 105 九的余数
- nyoj 105 九的余数
- NYOJ 105 九的余数
- nyoj 九的余数
- NYOJ 九的余数
- NYOJ-九的余数
- nyoj 九的余数
- NYOJ 九的余数
- JavaSe基础XX02——数组
- 数学是成就卓越开发人员的必备技能
- 【iOS】多线程GCD
- Android资源文件夹及资源文件的详细介绍
- Openstack的安装方法
- NYOJ 105 九的余数【数学】
- 1-Nancy文档教程——简介
- Codeforces #258 (Div. 2) B. Sort the Array
- 对于效率的一点感慨
- 列:取第几列的内容20140724 ①文本处理
- linux zip压缩和解压的各种操控
- android_储存_cookie
- Codeforces #258 (Div. 2) A. Game With Sticks
- Linux的僵尸进程解决攻略